- •Лабораторная работа 4. Подчиненные и составные запросы
- •Общие сведения
- •Применение подчиненных запросов
- •Подчиненный запрос
- •Подчиненные запросы в предложении where
- •Условия отбора в подчиненном запросе
- •Сравнение с результатом подчиненного запроса
- •Проверка на принадлежность результатам подчиненного запроса
- •Проверка на существование
- •Уровни вложенности запросов
- •Подчиненные запросы — резюме
Лабораторная работа 4. Подчиненные и составные запросы
Цель работы: Получит навыки программирования подчиненных и составных SQL-запросов.
Общие сведения
В SQL существует понятие подчиненного запроса; механизм подчиненных запосов позволяет использовать результаты одного запроса в качестве составной части другого. Возможность применения одного запроса внутри другого и была причиной появления слова «структурированный» в названии «структурированный запросов». Понятие подчиненного запроса не так широко известно, как понятие объединения, но оно играет важную роль в SQL по трем следующим причинау
-
инструкция SQL с подчиненным запросом зачастую является самым естественным способом выражения запроса, так как она лучше всего соответствует словесному описанию запроса;
-
подчиненные запросы облегчают написание инструкции SELECT, поскольку позволяют разбивать запрос на части (на запрос и подчиненные запросы), а затем складывать эти части вместе;
-
существуют запросы, которые нельзя сформулировать на SQL, не прибегая к помощи подчиненных запросов.
Применение подчиненных запросов
Подчиненным называется запрос, содержащийся в предложении WHERE или HAVING другой инструкции SQL. Подчиненные запросы позволяют естественным o6pазом обрабатывать запросы, выраженные через результаты других запросов.
Пример 4.1. Вывести всю информацию о поставках, объемы которых превышаю средний объем поставок в таблице поставок.
select *
from Delivery
where Quantity > (select avg(Quantity)
from Delivery)
Результат:
SID PID KID Quantity
----------- ----------- ----------- -----------
2 3 2 500
2 3 4 600
2 5 2 700
3 6 3 500
4 6 7 800
5 1 6 500
5 2 2 900
5 2 7 500
5 4 2 600
5 4 6 500
5 5 2 800
5 6 3 700
Подчиненный (внутренний) запрос вычисляет среднее значение объема поставок в таблице Поставки. Главный (внешний) запрос сравнивает объем поставки для каждой строки таблицы и, в зависимости от результата сравнения, либо добавляет данную поставку в таблицу результатов запроса, либо нет. Совокупно главный и подчиненный запросы выражают исходный запрос и извлекают из иных требуемую информацию.
Подчиненные SQL-запросы всегда выступают в качестве части предложения WHERE или HAVING. В предложении WHERE они помогают отбирать из таблицы результатов запроса отдельные строки, а в предложении HAVING — группы строк.
Подчиненный запрос
Подчиненный завсегда заключается в круглые скобки. Структура предложений в подчиненном запросе идентична структуре в инструкции SELECT; в подчиненном запросе все предложения (SELECT, FROM, WHERE) выполняют свои обычные функции.
Между подчиненным запросом и инструкцией SELECT имеется ряд отличий:
-
таблица результатов подчиненного запроса всегда состоит из одного столбца. Это означает, что в предложении SELECT подчиненного запроса всегда указывается один возвращаемый столбец;
-
в подчиненный запрос не может входить предложение ORDER BY. Результаты подчиненного запроса используются только внутри главного запроса и для пользователя остаются невидимыми, поэтому нет смысла их сортировать;
-
имена столбцов в подчиненном запросе могут являться ссылками на столбцы таблиц главного запроса.