Ключевые слова ALL, ANY и DISTINCT

До этого момента мы рассматривали, как извлечь все или заданные колонки из одной или нескольких таблиц. Для управления выводом дублирующихся строк результирующего набора данных можно использовать ключевые слова ALL или DISTINCT в предложении SELECT. Ключевое слово DISTINCT указывает, что строки результирующего набора данных должны быть уникальны, тогда как ключевое слово ALL указывает, что возвращать следует все строки. Например, для извлечения названий стран, в которых имеются заказчики, можно использовать следующий запрос:

SELECT DISTINCT Country FROM Customers

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

ALL — сравнение будет производиться со всеми записями, которые возвращает подзапрос (или просто со всеми значениями в набор). True вернется только в том случае, если все записи, которые возвращает подзапрос, будут удовлетворять указанному вами условию. Кроме того, в Oracle значение True вернется в ситуации, когда подзапрос не вернет ни одной записи.

В качестве примера приведем такой запрос:

select * from hr.employees where salary <= ALL(SELECT salary FROM hr.employees WHERE job_id = 'SH_CLERK')

Он вернет записи для всех сотрудников, для которых зарплата меньше или равна самой маленькой зарплате у сотрудников с должностью SH_CLERK.

ANY — сравнение вернет True, если условию будет удовлетворять любая запись из набора (или подзапроса). Например, такой запрос вернет всех пользователей, зарплата которых совпадает с зарплатой клерка:

select * from hr.employees where salary = ANY(SELECT salary FROM hr.employees WHERE job_id = 'SH_CLERK')