Подтвердить что ты не робот

Операторы SQL ANY & ALL

Я начал использовать sql и много слышал о операторах ANY и ALL. Может ли кто-нибудь объяснить мне, какие запросы они используют и как они работают?

4b9b3361

Ответ 1

Операторы ANY и ALL позволяют выполнять сравнение между значением одного столбца и рядом других значений. Например:

select * from Table1 t1 where t1.Col1 < ANY(select value from Table2)

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

Чтобы использовать пример, который может приближаться к дому, выполните следующее:

select * from Table1 t1 where t1.Col1 = ANY(select value from Table2)

То же самое, что и при этом:

select * from Table1 t1 where t1.Col1 in (select value from Table2)

Ответ 2

Я много слышал о ANY и Операторы ALL

Я слегка удивлен: я редко вижу, что они использовали себя. Чаще всего встречаются WHERE val IN (subquery) и WHERE EXISTS (subquery).

Заимствовать пример @Adam Robinson:

SELECT * 
  FROM Table1 AS t1 
 WHERE t1.Col1 < ANY (
                      SELECT value 
                        FROM Table2
                     );

Я обычно вижу это следующим образом:

SELECT * 
  FROM Table1 AS t1 
 WHERE EXISTS (
               SELECT *
                 FROM Table2 AS t2
                WHERE t1.Col1 < t2.value
              );

Я нахожу эту конструкцию более легкой для чтения, потому что параметры предиката (t1.Col1 и t2.value соответственно) ближе друг к другу.

Ответ 3

Добавляя к Адаму ответ, будьте осторожны, что синтаксис может быть неоднозначным:

SELECT b1 = ANY((SELECT b2 FROM t2 ...)) FROM t1 ...;

Здесь ANY можно рассматривать либо как введение подзапроса, либо как функцию агрегата, если подзапрос возвращает одну строку с булевым значением. (через postgresql.org)