2.12.   Операторы сравнения с множеством значений IN, ANY, All

Операторы сравнения с множеством значений имеют сле­дующий смысл.

IN

Равно любому из значений, полученных во вну­треннем запросе.

NOT IN

Не равно ни одному из значений, полученных во внутреннем запросе.

= ANY

То же, что и ВЧ, Соответствует логическому оператору (Ж.

> ANY, > = ANY

Больше, чем (либо больше или равно) любое по­лученное число. Эквивалентно > или > - для самого меньшего полученного числа.

< ANY, < = ANY

Меньше, чем (либо меньше или равно) любое полученное число. Эквивалент < или < - для самого большего полученного числа.

= ALL

Равно всем полученным значениям. Эквива­лентно логическому оператору АКБ

> ALL,  > = ALL

Больше, чем (либо больше или равно) все полу­ченные числа. Эквивалент > или > =для самого большего полученного числа.

< ALL, < = ALL

Меньше, чем (либо меньше или равно) все полу­ченные числа. Эквивалентно < или < = самого меньшего полученного числа.

Следует иметь в виду, что в некоторых СУБД поддержива­ются не все из этих операторов.

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

SELECT *

FROM STUDENT S WHERE CITY = ANY (SELECT CITY

FROM UNIVERSITY U

WHERE U.UNIV_ID = S.UNIV_ID);

Другой вариант этого запроса:

SELECT *

FROM STUDENT S WHERE CITY IN

(SELECT CITY

FROM UNIVERSITY U

WHERE U.UNIV_ID  =   S . UNIV_ID) ;

Выборка данных об идентификаторах студентов, у которых оценки превосходят величину, по крайней мере, одной из оце­нок, полученных ими же 6 октября 1999 года.

SELECT   DISTINCT STUDENT_ID FROM EXAM_MARKS WHERE MARK > ANY (SELECT MARK FROM EXAM_MARKS WHERE EXAM  DATE  =   ,06/Л0/1Э99'),-

Оператор ALL, как правило, эффективно используется с нера­венствами, а не с равенствами, поскольку значение равно всем, которое должно получиться в этом случае в результате выполнения подзапроса, может иметь место, только если все результаты иден­тичны. Такая ситуация практически не может быть реализована, так как если подзапрос генерирует множество различных значе­ний, то никакое одно значение не может быть равно сразу всем значениям в обычном смысле. В SQL выражение < > ALL реаль­но означает не равно ни одному из результатов подзапроса.

Подзапрос, выбирающий данные о названиях всех универ­ситетов с рейтингом более высоким, чем рейтинг любого уни­верситета Воронежа:

SELECT *

FROM UNIVERSITY WHERE RATING > ALL (SELECT RATING

FRCM UNIVERSITY

WHERE CITY =   -Воронеж') ;

В этом запросе вместо ALL можно использовать ANY (про­анализируйте, как в этом случае изменится смысл приведенно­го запроса):

SELECT *

FROM UNIVERSITY

WHERE NOT RATING > MY

(SELECT RATING

FROM UNIVERSITY

WHERE CITY = 'Всрсввк');