Вложенный запрос всегда является частью условия отбора в предложении WHERE и HAVING. В SQL используются следующие условия отбора вложенного во вложенном запросе:
– сравнение с результатом подчиненного запроса: значение выражения сравнивается с одним значением, вычисленным вложенным запросом. Эта проверка представляет собой простое сравнение.
– проверка на принадлежность результатам вложенного запроса: значение выражения проверяется на равенство одному из множества значений, возвращаемых вложенным запросом. Эта проверка представляет собой проверку на членство в множестве;
– проверка на существование: проверяется наличие строк в таблице результатов вложенного запроса;
– многократное сравнение: значение выражения сравнивается с каждым из множества значений, возвращаемых вложенным запросом.
Сравнение с результатом полученного запроса
В данном условии отбора значение выражения сравнивается со значением, вычисленным вложенным запросом. В случае совпадения значений проверка дает результат TRUE, а в случае несовпадения - FALSE. Этот вид условия отбора используется для сравнения значения из проверяемой строки с одним значением, полученным от вложенного запроса.
|
|
Приведем пример использования описываемого вида условия отбора: вывести список служащих, у которых плановый объем продаж равен или больше планового объем продаж офиса, расположенного в Инзе.
SELECT FAMILY, NAME
FROM SLUZHASCHIE
WHERE QUOTA >= (SELECT TARGET
FROM OFFISY
WHERE CITY = ‘Инза’)
FAMILY | NAME |
Филатов | Петр |
Полев | Андрей |
Пронин | Игорь |
В описываемом примере вложенный запрос считывает плановый объем продаж для офиса в Инзе. Затем это значение используется для отбора тех служащих, у которых плановый объем продаж выше, чем у этого офиса.
При этом следует иметь в виду, что вложенный запрос должен возвращать единичное значение, т.е. одну строку, содержащую один столбец. Если в результате выполнения вложенного запроса выводится несколько строк или столбцов, то сравнение теряет смысл и СУБД выводит сообщение об ошибке.
В случае возвращения вложенным запросом значения NULL или если не будет выведено ни одной строки, то операция сравнения вернет значение NULL.