Читайте также:
|
|
Задание
Выполните задания согласно варианту:
Чётные номера-2 вариант, нечётные номера-1 вариант
Вариант 1
1. Принять 2 сотрудников на работу в любые отделы
2. Перевести одного сотрудника внутри подразделения с одной должности на другую
3. Напечатать список работающих сотрудников, отсортированный по названию подразделений
4. Напечатать фамилии сотрудников, которые пришли на работу в один год с сотрудником с заданным номером
5. Напечатать список уволенных сотрудников, отсортированный по названию подразделений
6. Создать представление, отображающее названия подразделений, в которых трудятся одни женщины
7. Напечатать количество сотрудников в каждом подразделении в виде: Название подразделения всего мужчин женщин
Вариант 2
1. Уволить 2 сотрудников
2. Перевести одного сотрудника из одного подразделения в другое
3. Напечатать список работающих сотрудников, отсортированный по названию подразделений
4. Напечатать фамилии коллег(тех, кто работает в одном отделе) сотрудника с заданным номером
5. Напечатать список переведенных сотрудников, отсортированный по названию подразделений
6. Создать представление, отображающее названия должностей, которые занимают одни мужчины
7. Напечатать количество сотрудников в каждом подразделении в виде: Название подразделения всего мужчин женщин
Порядок выполнения работы
1.1- В Query Analyzer с помощью оператора Insert Into ввести 2 записи в таблицу истории назначений
1.2 В Query Analyzer с помощью оператора Update в поле дата_по в таблицу истории назначений записать дату увольнения для уволенных сотрудников
2 В Query Analyzer с помощью оператора Update в поле дата_по в таблицу истории назначений записать дату увольнения для переведённого сотрудника и ввести новую запись в таблицу истории назначений, используя оператор Insert into
3 Создать запрос, в котором выбрать из таблицы истории назначений записи с такими номерами, в которых поле дата_по пусто
4 Создать подзапрос, использовать его во внешнем запросе
5.1 Создать вложенный запрос, в котором выбрать из таблицы истории назначений записи с такими номерами, в которых поле дата_по не пусто и нет записей, в которых оно пусто
5.2 Создать вложенный запрос, в котором выбрать из таблицы истории назначений записи с такими номерами, в которых поле дата_по не пусто и есть записи, в которых оно пусто
Пример запроса со связанным подзапросом:
SELECT n,Фамилия FROM dbo.Сотрудники where n in
(SELECT distinct naz.n FROM dbo.Назначения naz
WHERE (date_end IS not NULL) and
not exists(SELECT naz1.n FROM dbo.Назначения naz1
WHERE (naz1.date_end IS NULL) and naz.n=naz1.n))
Теоретическая подготовка(проводится дома)
Написать на SQL-языке команды для пунктов 2-7
Контрольные вопросы
ü В каком случае вводятся псевдонимы таблиц в запросы со связными подзапросами?
ü Чем отличается запрос с обычным подзапросом от запроса со связным подзапросом?
Отчёт по практической работе № 5 студентки Круглова АС группы П-303
Тема: “Подзапросы ”
Цель: Научиться писать на T SQL сложные запросы
Вариант 2
Выполнение работы
Эквиваленты запросов на SQL языке
UPDATE Назначения
SET date_end = GETDATE()
WHERE (n = 2) OR
(n = 23)
2
UPDATE Назначения
SET date_end = GETDATE()
WHERE (n = 8) AND (date_end IS NULL)
INSERT INTO Назначения
(n, kod_p, kod_d, date_b, date_end, n_pr)
VALUES (8, 4, 42, GETDATE(), NULL, NULL)
SELECT Сотрудники.Фамилия, Подраздел.name_p
FROM Сотрудники INNER JOIN
Назначения ON Сотрудники.n = Назначения.n INNER JOIN
Подраздел ON Назначения.kod_p = Подраздел.kod_p
WHERE (Назначения.date_end IS NULL)
ORDER BY Подраздел.name_p
SELECT Сотрудники.Фамилия
FROM Сотрудники INNER JOIN
Назначения ON Сотрудники.n = Назначения.n
WHERE (Назначения.date_end IS NULL) AND (Назначения.kod_p =
(SELECT kod_p
FROM Назначения AS Назначения_1
WHERE (n = 5)))
SELECT Сотрудники.n, Сотрудники.Фамилия, Подраздел.name_p
FROM Назначения INNER JOIN
Сотрудники ON Назначения.n = Сотрудники.n INNER JOIN
Подраздел ON Назначения.kod_p = Подраздел.kod_p
WHERE (Назначения.date_end IS NULL) AND EXISTS
(SELECT n
FROM Назначения AS Назначения_1
WHERE (NOT (date_end IS NULL)) AND (n = Сотрудники.n))
ORDER BY Подраздел.name_p
SELECT Должности.name_d, Сотрудники.Фамилия
FROM Сотрудники INNER JOIN
Назначения AS naz ON Сотрудники.n = naz.n INNER JOIN
Должности ON naz.kod_d = Должности.kod_d
WHERE (NOT EXISTS
(SELECT 1 AS Expr1
FROM Сотрудники AS Сотр INNER JOIN
Назначения ON Сотр.n = Назначения.n
WHERE (naz.kod_d = Назначения.kod_d) AND (Сотр.Пол = 'ж')))
SELECT DISTINCT подразделения.name_p,
(SELECT COUNT(n) AS Expr1
FROM Назначения
WHERE (kod_p = подразделения.kod_p)) AS Всего,
(SELECT COUNT(Назначения_3.n) AS man
FROM Назначения AS Назначения_3 INNER JOIN
Сотрудники ON Назначения_3.n = Сотрудники.n
WHERE (Назначения_3.kod_p = подразделения.kod_p) AND (Сотрудники.Пол = 'м')) AS Мужчин,
(SELECT COUNT(Назначения_2.n) AS wman
FROM Назначения AS Назначения_2 INNER JOIN
Сотрудники AS Сотрудники_2 ON Назначения_2.n = Сотрудники_2.n
WHERE (Назначения_2.kod_p = подразделения.kod_p) AND (Сотрудники_2.Пол = 'ж')) AS Женщин
FROM Назначения AS Назначения_1 INNER JOIN
Сотрудники AS Сотрудники_1 ON Назначения_1.n = Сотрудники_1.n INNER JOIN
Подраздел AS подразделения ON Назначения_1.kod_p = подразделения.kod_p
Ответы на контрольные вопросы
1. В каком случае вводятся псевдонимы таблиц в запросы со связными подзапросами?
Псевдоним таблицы в запросе со связанным подзапросом вводиться в случае, если результат связанного запроса зависит от результата основного запроса и наоборот.
2. Чем отличается запрос с обычным подзапросом от запроса со связным подзапросом?
Запрос с обычным подзапросом отличается от запроса со связанным подзапросом тем, что при выполнении запроса с обычным подзапросом, сначала выполняется подзапрос, а потом только основной запрос. При запросе со связанным подзапросом, подзапрос выполняется отдельно для каждой строки основного запроса, т.е. во втором случае выполнение подзапроса происходит по строкам, а не целиком, как в первом.
Дата добавления: 2015-12-08; просмотров: 109 | Нарушение авторских прав