Операторы 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 требует, чтобы весь подзапрос повторного выполняется для каждой строки основного запроса.