Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD_KL_2010_14.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
28.97 Mб
Скачать

Сравнение с результатом полученного запроса

В данном условии отбора значение выражения сравнивается со значением, вычисленным вложенным запросом. В случае совпадения значений проверка дает результат TRUE, а в случае несовпадения  FALSE. Этот вид условия отбора используется для сравнения значения из проверяемой строки с одним значением, полученным от вложенного запроса.

Приведем пример использования описываемого вида условия отбора: вывести список служащих, у которых плановый объем продаж равен или больше планового объем продаж офиса, расположенного в Инзе.

SELECT FAMILY, NAME

FROM SLUZHASCHIE

WHERE QUOTA >= (SELECT TARGET

FROM OFFISY

WHERE CITY = ‘Инза’)

FAMILY

NAME

Филатов

Петр

Полев

Андрей

Пронин

Игорь

В описываемом примере вложенный запрос считывает плановый объем продаж для офиса в Инзе. Затем это значение используется для отбора тех служащих, у которых плановый объем продаж выше, чем у этого офиса.

При этом следует иметь в виду, что вложенный запрос должен возвращать единичное значение, т. е. одну строку, содержащую один столбец. Если в результате выполнения вложенного запроса выводится несколько строк или столбцов, то сравнение теряет смысл и СУБД выводит сообщение об ошибке.

В случае возвращения вложенным запросом значения NULL или если не будет выведено ни одной строки, то операция сравнения вернет значение NULL.

Проверка на принадлежность результатам вложенного запроса

Проверка на принадлежность результатам вложенного запроса, включенного в состав предиката IN, является аналогом проверки на членство в множестве. Текущее значение проверяемого выражения главного запроса сравнивается со столбцом значений, возвращаемых вложенным запросом. Если это значение равно одному из элементов столбца, то проверка дает результат TRUE и текущая строка включается в результирующую таблицу.

Приведем пример запроса, использующего проверку на принадлежность результатам вложенного запроса: вывести список служащих тех офисов, где фактический объем продаж превышает плановый.

SELECT FAMILY, NAME

FROM SLUZHASCHIE

WHERE SLUZHASCHIE.ID_OFC IN (SELECT OFFISY.ID_OFC

FROM OFFISY

WHERE SALES > TARGET)

FAMILY

NAME

Филатов

Петр

Петров

Петр

Вложенный запрос возвращает список идентификаторов офисов, где фактический объем продаж превышает плановый (в учебной базе данных есть два таких офиса  с идентификаторами 12 и 22). Главный запрос проверяет каждую строку таблицы SLUZHASCHIE, чтобы определить, работает ли данный служащий в одном из отобранных офисов.

В приведенном примере вложенный запрос возвращает в качестве результата множество значений, а предложение WHERE главного запроса проверяет равенство значения из строки таблицы главного запроса одному из значений полученного множества. Таким образом, проверка IN с вложенным запросом выполняется аналогично проверке IN в инструкции SELECT.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]