Подзапросы, возвращающие значения из нескольких столбцов.
Пример. Необходимо узнать фамилии сотрудников, должность и оклад которых совпадают с данными сотрудника Данина:
SELECT DISTINCT Оклад, Должность, Фамилия
FROM Сотрудники
WHERE (Должность, Оклад) = (SELECT Должность, Оклад
FROM Сотрудники WHERE Фамилия = ‘Данин’)
Пример. Составить список сотрудников, должность которых совпадает с должностью сотрудника Реброва или получающих столько же или более чем сотрудник Данин:
SELECT Оклад, Должность, Фамилия
FROM Сотрудники
WHERE Должность = ANY(SELECT Должность
FROM Сотрудники WHERE Фамилия = ‘Ребров’
OR Оклад >= ALL (SELECT Должность
FROM Сотрудники WHERE Фамилия = ‘Данин’)
ORDER BY Должность, Оклад
Пример. Найти фамилию и занимаемую должность всех сотрудников отдела 10, должность которых совпадает с должностью какого-либо сотрудника отдела торговли:
SELECT Должность, Фамилия
FROM Сотрудники
WHERE Должность IN (SELECT Должность
FROM Отелы, Сотрудники
WHERE Назв_отдела = ‘Торговля’ and
Сотрудники.Отдел = Отделы.Отдел)
Предположим, нужно найти номер отдела, фамилию и оклад сотрудников, зарабатывающих больше среднего оклада в своем отделе.
Select Отдел, Фамилия, Оклад
From Сотрудники S
Where Оклад > (Select AVG (оклад)
From Сотрудники
Where отдел = S.отдел)
В данном случае, для каждой строки первый запрос будет вложенным.
Такой механизм называется синхронизацией повторяющегося подзапроса. Псевдоним таблицы, определенный в основном запросе и встречающийся во вложенном подзапросе, сообщает СУБД о необходимости синхронизации подзапроса с основным запросом.
Последовательность действий СУБД при обработке вложенного подзапроса с синхронизацией:
В основном запросе извлекается очередная строка.
Номер отдела из этой строки передается во вложенный подзапрос и используется вместо S.отдел.
Выполняется вложенный подзапрос, который вычисляет среднюю зарплату для заданного отдела.
Средний оклад передается в основной запрос и используется в предложении Where.
Пример использования подзапросов с условием соединения.
Найти данные о сотрудниках, работающих в Твери, должность которых такая же, как у Евдокимова: