ALL

Оператор ALL

Замість ключового слова any може бути використано оператор all, який точнотак само використовується спільно з одним з шести операторів порівняння("=","<>", "<", "<=", ">", "> =" ). У цьому випадку перевіряєме значення також по черзі порівнюється з кожним елементом, який повертає вкладений запит, але рядки повертається тільки тоді, коли всі порівняння повертають 1 (істина).

Зауваження

Якщо у виразах з ключовим словом any використовується логіка АБО, тобтодостатньо, щоб спрацьовувало хоча б одна з багатьох умов, то в разі allвикористовується логіка І - повинні спрацьовувати всі умови.

 

У прикладі представлений запит, який повертає всі товарні позиції з таблиціproducts бази даних shop, ціна яких перевищує середню ціну кожного з каталогів.

 

Приклад

SELECT name, price FROM products

WHERE price > ALL (SELECT AVG(price) FROM products В

GROUP BY id_catalog);

 

name price

lintel Pentium 4 3.2GHz 725.00

Intel Pentium 4 3.0GHz 614.00

Intel Pentium 4 3.0GHz 567.00

Asustek P4C80C-E Delux 539.00

ASUSTEK A9600XT/TD 515.00

GIGABYTE AGP GV-N59X128D 588.00

 

Для того щоб зрозуміти логіку запиту, представленого у прикладі, виведеморезультат вкладеного запиту окремо.

 

SELECT AVG(price) FROM products GROUP BY id_catalog;

 

AVG(price)

348.333333

280.166667

384.500000

274.00000C

141.000000

 

Умова all у прикладі еквівалентно вимозі вивести всі товарні позиції, ціна якихбільше кожного із значень результуючої таблиці запиту, наведеного вище.

 

Тобто запит вигляду

"WHERE> all (select Y. ..)"

Можна тлумачити як "де X більше будь-якого обраного Y".

 

А запит вигляду

"Where X <all (select Y. ..)"
Слід читати "де X менше, ніж всі вибрані Y. ..".

Помилки, які можуть виникнути, якщо оператор any містить умову "<>", відбуваються і при all.