Подзапросы
Подзапросы обеспечивают другой метод для выполнения запросов к нескольким таблицам. Хотя объединения и подзапросы часто могут заменять друг друга, в некоторых случаях желаемый результат можно получить только с помощью подзапроса.
Ниже представлена упрощенная форма синтаксиса подзапроса, иллюстрирующая вложение подзапроса в операторе SELECT.
---------------Начало внешнего оператора SELECT------------SELECT [DISTINCT] [<table_name>.]<column_name>
FROM <table_name>
WHERE {expr { [NOT] IN | <condition_operator>[ANY | ALL] } | [NOT] EXISTS}
--------------------Внутренний подзапрос-------------------
(SELECT [DISTINCT] <column_name>
FROM <table_name>
[WHERE <condition>])
------Необязательная часть внешнего оператора SELECT-------
[GROUP BY <column_name>[,...
[HAVING <condition>] ]
[ORDER_BY <column_name>|<column_number> [ASC | DESC][,...]
Подзапросы возвращают результат внутреннего подзапроса во внешнее предложение и имеют две основные формы: коррелированную и некоррелированную.
Первая реализуется «изнутри наружу», т.е. внешний запрос выполняет то или иное действие, основываясь на результатах выполнения внутреннего запроса. Вторую (коррелированную) форму подзапроса можно представлять себе как обратное действие: внешний оператор предоставляет значение, которое будет использоваться при выполнении внутреннего подзапроса. Затем результаты выполнения подзапроса возвращаются на внешний запрос.