Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
345
Добавлен:
02.04.2015
Размер:
493.06 Кб
Скачать

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

Когда подзапрос возвращает одну строку, в предложении WHERE родительского запроса используют простые операции сравнения (= , < >, > , < , <= и т. д.).

Пример 20.Так для поиска сотрудника, имеющего минимальную зарплату, необходимо исполнить запрос:

SELECT имя, отдел, зарплата

FROM Сотрудники

WHERE зарплата = (SELECT Min(зарплата)

FROM Сотрудники );

Подзапросы возвращающие более одной строки

Пример 21.Для получения номеров и имен поставщиков, имеющих более более 3-х поставок, необходимо исполнить запрос:

SELECT номерп, имяп

FROM поставщики

WHERE номерп IN (SELECT номерп

FROM поставки

GROUP BY номерп HAVING Count( * ) > 3 );

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

Такой же результат можно получить и без подчиненного запроса. Как?

Типы подчиненных запросов:

  • запросы, использующие сравнения, синтаксическая конструкция которых может быть такой:

[ANYALLSOME] (инструкция SQL)

где

ANY – любой,ALL– все (по умолчанию),SOME– некоторые.

  • запросы, содержащие предложения, синтаксическая конструкция которых может быть такой:

выражение [NOT]IN(инструкцияSQL)

  • запросы, содержащие предложения, синтаксическая конструкция которых может быть такой:

[NOT]EXISTS(инструкцияSQL)

где EXISTS– существуют.

Пример 22. Отобрать из таблицыдеталидетали, которые стоят столько же, сколькоподшипник. Эту задачу можно решить с помощью однотабличного подчиненного запроса:

SELECT детали.*

FROM детали WHERE ((детали.цена = (SELECT цена FROM детали WHERE имяд="подшипник")));

В таблице детали не должно быть подшипников по разным ценам.

Операторы all, any и some

Эти операторы совместно с операциями =, < >, >, <, <=, >= могут быть использованы для подзапросов, возвращающих более одной строки.

Операторы ANYиSOMEвозвращают значенияTRUE, если условие выполняется хотя бы для одного возвращаемого подзапросом значения, в противном случае -FALSE.

Оператор ALLвозвращает значенияTRUE, если условие выполняется для каждого возвращаемого подзапросом значения, в противном случае -FALSE.

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

SELECT *

FROM Сотрудники

WHERE зарплата > ANY (SELECT зарплата FROM Сотрудники WHERE отдел = 30 );

Пример 24.Из таблицыСотрудники (номер, фамилия, имя, должность, отдел, зарплата )отобрать сведения о продавцах, зарплата которых превышает зарплатувсехначальников и директоров. Это можно сделать запросом:

SELECT Сотрудники.*

FROM Сотрудники

WHERE должность LIKE "продавец*" AND зарплата > ALL

(SELECT зарплата FROM Сотрудники

WHERE ((должность LIKE "*начальник*") OR ( должность LIKE

"*директор*")));

Операция not in

Для исключения значений, возвращаемых подзапросом, используется операция NOTIN. При использованииNOTINнеобходимо учитывать, что если среди возвращаемых подзапросом значений имеется неопределенное значение (NULL), то результат сравнения в операцииNOTINбудетNULL.

Соседние файлы в папке Материалы для лабораторных Базы данных