Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Первичный вторичный ключи / 11 сообщений из 11, страница 1 из 1
10.11.2018, 16:21
    #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
10.11.2018, 16:35
    #39731081
dermama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный вторичный ключи
СОРИ, я все понял, мой ответ - а с чего вдруг бд должна понять какое ID к какому относится, нужно самому вносить значения в companyID и в Rank
...
Рейтинг: 0 / 0
10.11.2018, 19:20
    #39731123
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный вторичный ключи
dermamaСОРИ, я все понял, мой ответ - а с чего вдруг бд должна понять какое ID к какому относится, нужно самому вносить значения в companyID и в RankFOREIGN KEY и PRIMARY KEY - это всего лишь ограничения (CONSTRAINTS) на вставляемые, изменяемые и удаляемые записи.
Есть правда, возможность делать каскадные изменения в других таблицах (при UPDATE и DELETE),
но это всё равно надо явно запустить, а не ждать, что всё произойдёт само собой.
...
Рейтинг: 0 / 0
10.11.2018, 22:26
    #39731179
dermama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный вторичный ключи
iap,

Мучаюсь второй час с примером, прошу о помощи в решении.
...
Рейтинг: 0 / 0
10.11.2018, 22:31
    #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
10.11.2018, 22:49
    #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
10.11.2018, 22:54
    #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
10.11.2018, 23:41
    #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
10.11.2018, 23:52
    #39731214
dermama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный вторичный ключи
alexeyvg, спасибо.
...
Рейтинг: 0 / 0
11.11.2018, 00:04
    #39731217
dermama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Первичный вторичный ключи
alexeyvg,

Я единственное не могу понять, как база данных определяет, что нужно считать именно количество сотрудников в компания, ведь никаких условий для этого нету, есть только вывести ТОП 1 компаний и функция COUNT, а что эта функция считает именно количество сотрудников, как понять*?
...
Рейтинг: 0 / 0
11.11.2018, 00:23
    #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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Первичный вторичный ключи / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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