Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab4.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
25 Кб
Скачать
☆

Предложения exists и not exist

Ключевые слова EXISTS и NOT EXISTS предназначены для использования только совместно с подзапросами. Результат их обработки представляет собой логическое значение TRUE или FALSE. Для ключевого слова EXISTS результат равен TRUE в том и только в том случае, если в возвращаемой подзапросом результирующей таблице присутствует хотя бы одна строка. Если результирующая таблица подзапроса пуста, результатом обработки ключевого слова EXISTS будет значение FALSE. Для ключевого слова NOT EXISTS используются правила обработки, обратные по отношению к ключевому слову EXISTS. Поскольку по ключевым словам EXISTS и NOT EXISTS проверяется лишь наличие строк в результирующей таблице подзапроса, то эта таблица может содержать произвольное количество столбцов.

Пример 6. Использование ключевого слова exists

Перечислите всех сотрудников компании, которые работают в ее лондонском отделении.

SELECT full_name FROM employee e    WHERE EXISTS      (SELECT * FROM department d WHERE d.dept_no = e.dept_no         AND location = 'London')

FULL_NAME       

=================

Bennet, Ann     

Reeves, Roger   

Stansbury, Willie

Этот запрос можно перефразировать следующим образом: "Выбрать сведения обо всех работниках, для которых в таблице employee существует запись, содержащая тот же номер отделения dept_no, который указан для данного работника, и в которой значение столбца location равно 'London'. Проверка необходимости включения сведений о работнике в результирующую таблицу заключается в анализе существования подобной записи. Если она существует, результат обработки ключевого слова EXISTS будет равен TRUE.

Обратите внимание, что первая часть условия поиска, d.dept_no = e.dept_no, необходима для получения гарантий того, что для каждого работника будет анализироваться корректная строка данных об отделении компании. Если опустить это условие, то в результирующую таблицу запроса будут помещены сведения обо всех работниках компании, поскольку подзапрос SELECT * FROM department WHERE city='London' всегда будет возвращать не менее одной строки и проверка существования в каждом случае будет давать значение TRUE. В результате запрос будет иметь следующий вид:

SELECT full_name FROM employee e WHERE EXISTS (SELECT * FROM department d WHERE true)

Этот инструкция эквивалентна следующей:

SELECT full_name FROM employee

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