Операторы SOME и ANY

Операторы SOME и ANY взаимозаменяемы.

Пример 1.Найти студентов, которые получили оценки по разным учебным предметам.

SELECT *

FROM STUDENT

WHERE SNUM= ANY

(SELECT SNUM

FROM USP);

Результат запроса:

SNUM SFAM SIMA SOTCH STIP

--------------------------------------------------------------- ---------------

3412 Поляков Анатолий Алексеевич 25.50

3413 Cтарова Любовь Михайловна 17.00

3414 Гриценко Владимир Николаевич 0.00

3416 Нагорный Евгений Васильевич 25.50

В ряде случаев допускается использование операторов IN или EXISTS вместо оператора ANY.

Пример 2.Найти студентов, которые получили оценки по разным учебным предметам.

SELECT *

FROM STUDENT

WHERE SNUM IN

(SELECT SNUM

FROM USP);

Результат запроса аналогичен примеру 1.

Оператор ANY может использовать другие реляционные операторы, за исключением равняется, и, таким образом, реализовать сравнение, которые недоступны с IN.

Пример 3. Вывести название учебных предметов, для которых существует хотя бы одна учебная дисциплина с количеством часов, меньшим, чем у текущей.

SELECT PNAME

FROM PREDMET

WHERE HOURS> ANY

(SELECT HOURS

FROM PREDMET);

Результат запроса:

PNAME

--------------

Физика

Химия

Математика

Пример 4. Реализовать предыдущий запрос с использованием EXISTS.

SELECT PNAME

FROM PREDMET FIRST

WHERE EXISTS

(SELECT *

FROM PREDMET SECOND

WHERE FIRST.HOURS> SECOND.HOURS);

В ряде случаев, из-за различий в обработке NULL значений, вариант с EXISTS не абсолютно идентичен, чем при использовании ANY, поэтому необходимо в таких случаях применять команду IS NULL.

Основное преимущество в использовании ANY и ALL по сравнению с EXISTS заключается в том, что последний требует соотнесенных подзапросов, порой сложных для понимания. Кроме того, подзапросы с ANY или ALL могут выполняться один раз и иметь вывод, используемый для определения предиката для каждой строки основного запроса, а EXISTS требует, чтобы весь подзапрос повторного выполняется для каждой строки основного запроса.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: