Министерство образования и науки Российской Федерации
Федеральное государственное автономное образовательное
учреждение высшего образования
Национальный исследовательский университет “МИЭТ”
Факультет Прикладных информационных технологий
Дисциплина: Базы данных
Отчёт по 8 лабораторной работе
Использование объединяющих и вложенных запросов и корректирующих операторов языка SQL
Цель работы: изучить возможности оператора UNION и вложенных запросов и получить практические навыки использования операторов языка SQL, изменяющих данные, хранящиеся в БД.
Выполнил:
Студент П-21
Татьяна
Москва, 2019
Контрольные вопросы
Как объединить результаты выполнения нескольких запросов?
Язык SQL предусматривает возможность объединения результатов двух или более запросов в одну таблицу с помощью оператора UNION.
SELECT Фамилия + Имя, Должность
FROM Сотрудники
WHERE Город = 'Москва'
UNION
SELECT ОбращатьсяК, Должность
FROM Клиенты
WHERE Город = 'Москва'
Оператор UNION можно использовать многократно, чтобы объединить результаты трех или более запросов, указывая с помощью круглых скобок порядок выполнения операторов:
SELECT * FROM A
UNION ALL (SELECT*FROM B UNION SELECT*FROM C)
Какие ограничения существуют при использовании оператора union?
Чтобы таблицы результатов запроса можно было объединить с помощью оператора UNION, они должны удовлетворять следующим требованиям:
1) таблицы должны содержать одинаковое число столбцов;
2) тип данных каждого столбца первой таблицы должен совпадать с типом данных соответствующего столбца во второй таблице;
3) ни одна из таблиц не может быть отсортирована с помощью предложения ORDER BY, однако объединенные результаты запроса можно отсортировать.
Если в результирующей объединенной таблице необходимо сохранить повторяющиеся строки, сразу за ключевым словом UNION следует указать ключевое слово ALL.
Использование предложения ORDER BY в операторах SELECT, составляющих оператор UNION, запрещено.
3. Какие запросы называются вложенными?
Вложенным, или подчиненным, запросом (подзапросом), называется запрос, содержащийся в списке возвращаемых столбцов или предложениях WHERE или HAVING другого оператора.
В чем отличие подзапроса от оператора SELECT?
Подзапрос – законченный оператор SELECT, внедрённый в тело другого оператора SELECT.
5. Что называется внешней ссылкой?
Внешняя ссылка представляет собой имя столбца, принадлежащего таблице, указанной в предложении FROM главного запроса, и не входящего ни в одну из таблиц, перечисленных в предложении FROM вложенного запроса.
6. Какой подзапрос называется связанным?
Если во вложенном запросе имеется внешняя ссылка, то он называется связанным подзапросом.
7. В чем особенность выполнения связанного подзапроса?
Особенностью связанного подзапроса является то, что он выполняется многократно, по одному разу для каждой строки таблицы, указанной в главном запросе.
8. Какие виды условий поиска с подзапросами предусмотрены в языке SQL? Приведите примеры.
Сравнение с результатом вложенного запроса. Сравнивает значение выражения с одним значением, возвращённым вложенным запросом (=, <> , < , <= , > , >=);
SELECT * FROM Поставщики
WHERE Название = (SELECT Название FROM Клиенты WHERE Клиенты.Название = Поставщики.Название)
Проверка на принадлежность результатам вложенного запроса. Проверяет значение выражения на равенство с одним из значений множества, возвращённого вложенным запросом.
SELECT * FROM Поставщики
WHERE Название NOT IN (SELECT Название FROM Клиенты WHERE Клиенты.Название = Поставщики.Название)
Проверка на существование. Проверяет наличие строк в таблице результатов вложенного запроса.
SELECT * FROM Поставщики
WHERE EXISTS (SELECT Название FROM Клиенты WHERE Клиенты.Название = Поставщики.Название)
Многократное сравнение. Сравнивает значение выражения с каждым из значений множества, возвращаемого вложенным запросом.
SELECT Фамилия, Имя, "оформил", COUNT(КодЗаказа) , "заказов"
FROM Сотрудники, Заказы
WHERE Сотрудники.КодСотрудника = Заказы.КодСотрудника
GROUP BY Фамилия, Имя
HAVING COUNT(КодЗаказа)
>= ALL
(SELECT COUNT(КодЗаказа)
FROM Сотрудники, Заказы
WHERE Сотрудники.КодСотрудника = Заказы.КодСотрудника GROUP BY Фамилия, Имя)