Разница между in и любыми операторами в sql - PullRequest
33 голосов
/ 13 сентября 2010

В чем разница между IN и ANY операторами в SQL?

Ответы [ 9 ]

30 голосов
/ 13 сентября 2010
SQL>
SQL> -- Use the ANY operator in a WHERE clause to compare a value with any of the values in a list.
SQL>

SQL> - Вы должны поместить оператор =, <>, <,>, <= или> = перед ЛЮБОЙ.

SQL>
SQL> SELECT *
  2  FROM employee
  3  WHERE salary > ANY (2000, 3000, 4000);

Для InОператор

SQL> -- Use the IN operator in a WHERE clause to compare a value with any of the values in a list.

, но с In вы не можете использовать =, <>, <,>, <= или> =

16 голосов
/ 13 сентября 2010

IN-> равно любому в списке.

ANY-> сравнивает значение с каждым значением, возвращаемым подзапросом.

ALL-> сравнивает значение с каждым значением, возвращаемымподзапрос.

Например:

IN: (Q): Показать сведения обо всех сотрудниках, чьи зарплаты соответствуют наименьшим инвестициям департаментов?

(A): SQL> Выбрать Ename Sal Deptno из Emp, где Sal IN (Выбрать мин (Sal) из группы Emp по Deptno);

ANY:

Значит меньше максимального значения в списке.

(Q): Получить сведения обо всех сотрудниках, которые зарабатывают меньше, чем самый высокооплачиваемый сотрудник, контролирующий другие Emp?

(A): SQL> Выбрать Empno Ename Job Sl из Emp где Sal

ЛЮБОЙ: -> Значения, превышающие минимальное значение в списке.

(Q): Получить сведения обо всех сотрудниках, которые зарабатывают больше, чем наименее оплачиваемый из отдела 10?

(A): SQL> Выбрать Empno Ename Job Sal из Emp Где Sal> Любой (Выбрать Min (Sal) из Emp Где Deptno 10);

ANY: -> Это эквивалентно In Operator.

Примечание: «Some» также используется вместо ANY.

10 голосов
/ 01 апреля 2014

Возможно, для лучшего понимания, эти два условия эквивалентны.Это вопрос вкуса, который вы используете (при условии, что СУБД поддерживает их оба)

... WHERE x IN (SELECT Y FROM THE_TABLE)  
... WHERE x =ANY (SELECT Y FROM THE_TABLE) 

, и это также

... WHERE x NOT IN (SELECT Y FROM THE_TABLE) 
... WHERE x <>ALL (SELECT Y FROM THE_TABLE) 

На самом деле моя личная привычка - использовать IN дляВыражение списка (например, WHERE x IN (2,4,6,8) и =ANY, соответственно <>ALL для подзапросов.

7 голосов
/ 24 апреля 2014

При использовании всех

ВЫБРАТЬ empno, sal ОТ ОТ ГДЕ sal> ALL (2000, 3000, 4000);

 EMPNO        SAL

  7839       5000

Будет возвращен результат, эквивалентный запросу:

ВЫБРАТЬ empno, sal ИЗ emp, ГДЕ sal> 2000 И sal> 3000 AND sal> 4000;

При использовании любого

SELECT empno, sal ИЗ emp, WHERE sal> ANY (2000, 3000, 4000);

 EMPNO        SAL

  7566       2975
  7698       2850
  7782       2450
  7788       3000
  7839       5000
  7902       3000

Возвращает результат, аналогичный

SELECTempno, соль ОТ emp, где соль> 2000 ИЛИ соль> 3000 ИЛИ соль> 4000;

2 голосов
/ 01 апреля 2014

ЛЮБОЙ И ВСЕ ОПЕРАТОР В СЕРВЕРЕ SQL 2008R2.

Используя оператор сравнения> в качестве примера,> ALL означает больше, чем каждое значение - другими словами, больше, чем максимальное значение. Например,> ALL (1, 2, 3) означает больше, чем 3.> ЛЮБОЙ означает больше, чем хотя бы одно значение, то есть больше минимального. Итак> ЛЮБОЙ (1, 2, 3) означает больше, чем 1.

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

1 голос
/ 27 ноября 2017

Операторы ANY и ALL используются с предложением WHERE или HAVING.

Оператор ANY возвращает true, если какое-либо из значений подзапроса удовлетворяет условию.

Оператор ALL возвращает true, есливсе значения подзапроса удовлетворяют условию.

1 голос
/ 13 сентября 2010

Для ЛЮБОГО вам нужен оператор:

WHERE X > ANY (SELECT Y FROM Z)

С IN вы не можете.Это всегда проверка на равенство.

0 голосов
/ 05 марта 2019

(in) - это особый вид оператора, который используется для выбора значения одно за другим из списка значений, который мы указали. В то время как (любой) используется с предложением where

0 голосов
/ 04 сентября 2018

Когда мы сравниваем любое значение столбца, используя «IN», некоторый набор, скажем, {value1,value2 ...}, тогда значение столбца должно присутствовать в наборе, но в случае ЛЮБОГО мы сравниваем так:

col.value > ANY ({value1,value2,...})

тогда значение должно быть больше любого из установленного значения.

в случае «ВСЕ»

col.value> ALL({value1,value2,...})

значение должно быть больше, чем все значения в наборе.

См. Следующие изображения для лучшего понимания:

...