В SQL существует понятие подчиненного запроса. Механизм подчиненных запросов позволяет использовать результаты одного запроса в качестве составной части другого. Понятие подчиненного запроса играет важную роль в SQL по трем следующим причинам:
• инструкция SQL с подчиненным запросом зачастую является самым естественным способом выражения запроса, так как она лучше всего соответствует словесному описанию запроса.
• подчиненные запросы облегчают написание инструкции SELECT, поскольку они позволяют разбивать запрос на части (на запрос и подчиненные запросы).
• существуют запросы, которые нельзя сформулировать на SQL иначе как с помощью подзапросов.
Подчиненным называется запрос, содержащийся в предложении WHERE или HAVING другой инструкции SQL. Подчиненные запросы позволяют естественным образом обрабатывать запросы, выраженные через результаты других запросов. Вот пример такого запроса:
Вывести список сотрудников, работающих в Минских отделениях предприятия
select fname, lname, position
from staff
where bno in (select bno
from branch
where city = ‘Минск’);
Подчиненный запрос возвращает вектор идентификаторов отделений, расположенных в Минске. Главный (внешний запрос) посредством проверки IN возвращает выборочную информацию из тех строк таблицы STAFF , которые по значению в Bno удовлетворяют её истинности.
Подчиненные SQL-запросы всегда выступают в качестве части предложения WHERE или HAVING. В предложении WHERE они помогают отбирать из таблицы результатов запроса отдельные строки, а в предложении HAVING – группы строк.
Подчиненный запрос всегда заключается в круглые скобки и сохраняет знакомую структуру инструкции SELECT, содержащей предложение FROM и необязательные предложения. Структура этих предложений в подчиненном запросе идентична их структуре в инструкции SELECT, в подчиненном запросе эти предложения выполняют свои обычные функции.
Однако между подчиненным запросом и инструкцией SELECT имеется ряд отличий:
• таблица результатов подчиненного запроса должна состоять только из одного столбца. Это означает, что в предложении SELECT подчиненного запроса всегда указывается один возвращаемый столбец.
• в подчиненный запрос не может входить предложение ORDER BY. Результаты подчиненного запроса используются только внутри главного запроса и для пользователя остаются невидимыми, поэтому нет смысла их сортировать.
• имена столбцов в подчиненном запросе могут являться ссылками (носят название внешних ссылок) на столбцы таблиц главного запроса.