powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Первичный вторичный ключи
11 сообщений из 11, страница 1 из 1
Первичный вторичный ключи
    #39731078
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть 3 таблицы Employee, Company, Rank
создаем!
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
CREATE TABLE Employee
(
EmployeeID int NOT NULL IDENTITY,
EmployeeName varchar(30) NOT NULL,
EmployeeAge int NOT NULL,
CompanyID int DEFAULT NULL,
Rank int DEFAULT NULL,
PRIMARY KEY(EmployeeID)
)
GO

CREATE TABLE Company
(
ID int NOT NULL IDENTITY,
CompanyName varchar (30) NOT NULL,
CompanyAdress varchar (30) NOT NULL,
PRIMARY KEY (ID)
)
GO

CREATE TABLE Rank
(
Rank int NOT NULL IDENTITY,
Salary int NOT NULL,
PRIMARY KEY (Rank)
)
GO




Вставляем данные в Employee

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
INSERT INTO Employee
(EmployeeName, EmployeeAge)
VALUES
('Ivan Petrov', 25),
('Petr Gavrilov', 30),
('Sergey Dobrinin', 28),
('Georgiy Jukov', 32),
('Simonenko Ilya', 22),
('Egorov Dmitriy', 35),
('Ivanov Anton', 29),
('Ponomarev Dmitriy', 33),
('Golubev Alexey', 20),
('Fedorov Mikhail', 24)
GO



Вставляем данные в Company

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
INSERT INTO Company
VALUES
('Alfa', 'Moscow'),
('Beta', 'London'),
('Gamma', 'NY'),
('Delta', 'Paris'),
('Dron', 'Kashin'),
('Penta', 'Tver'),
('Sibur', 'SanktPiter'),
('Sber', 'Kasan'),
('WTB', 'Kostroma'),
('Prom', 'Pskov')
GO


Вставляем данные в Rank

I
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
NSERT INTO Rank
VALUES
(500000),
(130000),
(20000),
(55000),
(47000),
(11000),
(29000),
(178000),
(40000),
(30000)
GO



Таблица Employee Главная, через ALTER TABLE делаем CompanyID и Rank в качестве FOREIGN KEY

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
ALTER TABLE Employee
ADD CONSTRAINT Company_CompanyID_FK
FOREIGN KEY(CompanyID)
REFERENCES Company (ID)
GO

ALTER TABLE Employee
ADD CONSTRAINT Rank_Rank_FK
FOREIGN KEY (Rank)
REFERENCES Rank (Rank)
GO


Сделали, Вопрос, почему ID из Company и Rank не подгрузились в Employee? Или что я не правильно делаю
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
employeeID EmployeeName   EmployeeAGE        CompanyID     Rank
1	          Ivan Petrov	        25	                    NULL	     NULL
2	          Petr Gavrilov	        30	                    NULL	     NULL
3	          Sergey Dobrinin	28	                    NULL	     NULL
4	          Georgiy Jukov	        32	                    NULL	     NULL
5	          Simonenko Ilya	22	                    NULL          NULL
6	          Egorov Dmitriy	        35	                    NULL	     NULL
7	          Ivanov Anton	        29                        NULL	     NULL
8	          Ponomarev Dmitriy	33	                    NULL	     NULL
9	          Golubev Alexey	20	                    NULL	     NULL
10	          Fedorov Mikhail	24	                    NULL	     NULL
...
Рейтинг: 0 / 0
Первичный вторичный ключи
    #39731081
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СОРИ, я все понял, мой ответ - а с чего вдруг бд должна понять какое ID к какому относится, нужно самому вносить значения в companyID и в Rank
...
Рейтинг: 0 / 0
Первичный вторичный ключи
    #39731123
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermamaСОРИ, я все понял, мой ответ - а с чего вдруг бд должна понять какое ID к какому относится, нужно самому вносить значения в companyID и в RankFOREIGN KEY и PRIMARY KEY - это всего лишь ограничения (CONSTRAINTS) на вставляемые, изменяемые и удаляемые записи.
Есть правда, возможность делать каскадные изменения в других таблицах (при UPDATE и DELETE),
но это всё равно надо явно запустить, а не ждать, что всё произойдёт само собой.
...
Рейтинг: 0 / 0
Первичный вторичный ключи
    #39731179
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iap,

Мучаюсь второй час с примером, прошу о помощи в решении.
...
Рейтинг: 0 / 0
Первичный вторичный ключи
    #39731181
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iap,

Мучаюсь второй час с примером, прошу о помощи в решении. Есть 2 таблицы


ID CompanyNAME Company Adress
1 Alfa Moscow
2 Beta London
3 Gamma NY
4 Delta Paris
5 Dron Kashin
6 Penta Tver
7 Sibur SanktPiter
8 Sber Kasan
9 WTB Kostroma
10 Prom Pskov

И
EmployeeID EmployeeNAME EmployeeAge CompanyID Rank
1 Ivan Petrov 25 1 2
2 Petr Gavrilov 30 2 3
3 Sergey Dobrinin 28 5 1
4 Georgiy Jukov 32 1 4
5 Simonenko Ilya 22 6 7
6 Egorov Dmitriy 35 10 8
7 Ivanov Anton 29 9 6
8 Ponomarev Dmitriy 33 3 2
9 Golubev Alexey 20 5 5
10 Fedorov Mikhail 24 4 7


Задание следующее 5. Show Company name that has biggest number of employees
Показать компании у которых самое большое число сотрудников... не могу понять как делать
...
Рейтинг: 0 / 0
Первичный вторичный ключи
    #39731196
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я сделал вот так, но что то мне подсказывает, что это не верно так как в моих компаниях нет компаний в которых больше чем один сотрудник

SELECT c.CompanyName
FROM Company c
INNER JOIN
Employee e
ON c.ID = e.EmployeeID
WHERE EmployeeName = (SELECT MAX(EmployeeName) FROM Employee)
GO

хотя результат Dron
...
Рейтинг: 0 / 0
Первичный вторичный ключи
    #39731203
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть еще вот такой вариант, но он подходит лишь тогда, когда я знаю, больше одного уже достаточно!!!


SELECT COUNT(c.CompanyName) as Name
FROM Employee e
INNER JOIN
Company c
ON e.EmployeeID = c.ID
GROUP BY EmployeeID
HAVING COUNT(c.CompanyName)>1
GO
...
Рейтинг: 0 / 0
Первичный вторичный ключи
    #39731210
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermamaЗадание следующее 5. Show Company name that has biggest number of employees
Показать компании у которых самое большое число сотрудников... не могу понять как делатьНе "компании", а "компанию", одну.
Код: sql
1.
2.
3.
4.
5.
6.
SELECT top 1 c.CompanyName, COUNT(*) as cnt
FROM Company c
  INNER JOIN Employee e
  ON c.ID = e.CompanyID
GROUP BY c.CompanyName
ORDER BY cnt DESC
...
Рейтинг: 0 / 0
Первичный вторичный ключи
    #39731214
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg, спасибо.
...
Рейтинг: 0 / 0
Первичный вторичный ключи
    #39731217
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,

Я единственное не могу понять, как база данных определяет, что нужно считать именно количество сотрудников в компания, ведь никаких условий для этого нету, есть только вывести ТОП 1 компаний и функция COUNT, а что эта функция считает именно количество сотрудников, как понять*?
...
Рейтинг: 0 / 0
Первичный вторичный ключи
    #39731225
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermama,

Код: sql
1.
GROUP BY c.CompanyName



Вы соединяете каждого сотрудника с его компанией, потом группируете по компании и агрегатная функция count считает по условию группировки - по количеству сотрудников в компании.

Посмотрите на результат без подсчёта для наглядности:

Код: sql
1.
2.
3.
4.
SELECT  *
FROM Company c
  INNER JOIN Employee e
  ON c.ID = e.CompanyID



Почитайте про агрегатные функции, без них никуда в sql
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Первичный вторичный ключи
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]