Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SQL.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
186 Кб
Скачать
☆

2.10.1Подзапросы в предложении where

2.10.1.1Подзапросы, не возвращающие значений или возвращающие несколько значений

[NOT] IN, операторы сравнения с ключевыми словами ANY или ALL.

ALL

Результат

ANY

Результат

>ALL(1,2,3)

>3

>ANY(1,2,3)

>1

<ALL(1,2,3)

<1

<ANY(1,2,3)

<3

=ALL(1,2,3)

=1 или =2 или =3

=ANY(1,2,3)

=1 или =2 или =3

<>ALL(1,2,3)

<>1 и <>2 и <>3

<>ANY(1,2,3)

<>1 или <>2 или <>3

Пример:

Все сотрудники, имеющие зарплату большую, чем у любого из руководителей

SELECT Табельный номер, Фамилия, Имя, Отчество FROM СП_СЛ WHERE Оклад>ALL(SELECT Оклад FROM СП_СЛ, ЛАБ WHERE СП_СЛ.Табельный номер= ЛАБ.Код руководителя)

Все сотрудники, имеющие зарплату большую, чем у кого-нибудь из руководителей

SELECT Табельный номер, Фамилия, Имя, Отчество FROM СП_СЛ WHERE Оклад>ANY(SELECT Оклад FROM СП_СЛ, ЛАБ WHERE СП_СЛ.Табельный номер= ЛАБ.Код руководителя)

2.10.1.2Подзапросы, возвращающие единственное значение

Если запрос возвращает единственное значение, он может быть использован в качестве подзапроса, располагаемого в любом месте предложения WHERE, где допустимо задать константу или имя атрибута. В этом случае операндом выражения сравнения будет значение, возвращаемое подзапросом.

Использование обобщающих функций гарантирует возвращение единственного значения.

Пример:

Список всех сотрудников, имеющих оклады выше среднего по организации

SELECT Табельный номер, Фамилия, Имя, Отчество, Оклад FROM СП_СЛ WHERE Оклад>(SELECT AVG(Оклад) FROM СП_СЛ)

2.10.1.3Подзапросы, выполняющие проверку на существование

Если тот или иной запрос начинается с ключевого слова EXISTS, этот подзапрос функционирует как «тест на существование». Ключевое слово EXISTS в предложении WHERE выполняет проверку на существование данных, которые удовлетворяют критериям соответствующего подзапроса.

С помощью EXISTS выполняется проверка существования «пустого набора» строк. Если подзапрос возвращает хотя бы одну строку, этот результат оценивается как «истина» и результат выполнения EXISTS будет успешным.

Пример:

Список всех руководителей получавших премию

SELECT Код руководителя FROM ЛАБ WHERE EXISTS (SELECT * FROM ПР, ЛАБ WHERE Табельный номер= ЛАБ.Код руководителя)

Замечания к использованию ключевого слова EXISTS

Ключевому слову EXISTS не предшествует имя столбца.

Список выбора подзапроса, начинающегося с EXISTS почти всегда состоит из символа звездочка (*). Нет никакого смысла вводить имена столбцов, поскольку выполняется лишь тест на существование строк, которые удовлетворяют условиям подзапроса, которые указываются в предложении WHERE этого подзапроса.

Оператор NOT EXISTS отыскивает пустой набор.

2.10.2Подзапросы в предложении from

Если результат подзапроса должен быть источником данных для построения запроса, то подзапрос помещается в предложение FROM обычно с присвоением «новой» таблице псевдонима (alias).

Пример:

Список сотрудников с указанием объема премии, полученной ими

SELECT Табельный номер, S.ПР_Сумма FROM СП_СЛ, (SELECT Табельный номер, SUM(Размер премии) as ПР_Сумма FROM ПР GROUP BY Табельный номер) S WHERE СП_СЛ.Табельный номер=S.Табельный номер

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