56

SQL中的IN和运算符有什么区别?ANY

4

11 回答 11

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

SQL> -- 您必须在 ANY 之前放置 =、<>、<、>、<= 或 >= 运算符。

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.
SQL> SELECT *
  2  FROM employee
  3  WHERE salary IN (2000, 3000, 4000);

但是对于 IN 运算符,您不能使用 =、<>、<、>、<= 或 >=

于 2010-09-13T10:06:01.057 回答
24

IN - 等于列表中的任何内容

ANY - 将值与子查询返回的每个值进行比较。

ALL - 将值与子查询返回的每个值进行比较。

例如:

在:

显示所有工资与部门投资最少的员工的详细信息?

 Select Ename, Sal, Deptno 
 from Emp 
 Where Sal IN (Select Min(Sal) 
               From Emp 
               Group By Deptno);

任何:

< ANY表示小于列表中的最大值。

获取所有收入低于最高收入经理的员工的详细信息?

 Select Empno, Ename, Job, Sal 
 From Emp
 Where Sal < Any (Select Distinct MGR 
                  From Emp);

> ANY表示大于列表中的最小值。

获取第 10 部门收入高于最低工资的所有员工的详细信息?

 Select Empno, Ename, Job, Sal 
 From Emp
 Where Sal > Any (Select Min(Sal) 
                  From Emp 
                  Where Deptno 10);

= ANY相当于 in 运算符。

注意:SOME也可以用来代替ANY.

于 2010-09-13T10:09:26.557 回答
19

也许为了更好地理解,这两个条件是等价的。使用哪一个是个人喜好问题(前提是 RDBMS 支持这两者)

... 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)and =ANY,resp. <>ALLfor sub-queries.

于 2014-04-01T07:08:30.660 回答
8

在使用所有

SELECT empno, sal FROM emp WHERE sal > ALL (2000, 3000, 4000);

 EMPNO        SAL

  7839       5000

它将返回与查询等效的结果:

SELECT empno, sal FROM emp WHERE sal > 2000 AND sal > 3000 AND sal > 4000;

在使用任何

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

 EMPNO        SAL

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

返回与

SELECT empno, sal FROM emp WHERE sal > 2000 OR sal > 3000 OR sal > 4000;

于 2014-04-24T03:06:40.203 回答
3

使用 ANY,您需要一个运算符:

WHERE X > ANY (SELECT Y FROM Z)

使用 IN,你不能。它总是在测试平等。

于 2010-09-13T10:08:27.137 回答
3

SQL SERVER 2008R2 中的 ANY 和 ALL 运算符。

以 > 比较运算符为例,>ALL 表示大于所有值,即大于最大值。例如,>ALL (1, 2, 3) 表示大于 3。>ANY 表示大于至少一个值,即大于最小值。所以 >ANY (1, 2, 3) 表示大于 1。

类似地,>ANY 表示对于满足外部查询中指定条件的行,引入子查询的列中的值必须大于子查询返回的值列表中的至少一个值。

于 2014-04-01T06:53:46.957 回答
2

IN - 这很容易理解。查询应该只选择那些在“IN”子句中指定的值。现在,让我们通过查询来理解“ANY”。ANY 表示它应该大于或小于列表中的任何值。

假设 Orders 表的 OrderID 为 1 到 10

观察以下查询:从 OrderID < ANY (3,5,7)
的 Orders 中选择 OrderID

上述查询的答案是:
OrderID
1,2,3,4,5,6

解释:查询说查找小于任何指定值的 OrderID。因此数据库搜索并包含 OrderID 如下:
Is 1<3- Yes 因此包含 OrderID 1
Is 2<3- Yes 因此包含 OrderID 2
Is 3<3- No, is 3<5 -Yes(指定为 5值),因此包含 OrderID 3
是 4<3- 否,是 4<5 -是,因此包括 OrderID 4
是 5<3- 否,是 5<5 -否,是 5<7(指定为 5值)-是,因此包含 OrderID 5
是 6<3- 否,是 6<5 -否,是 6<7-是,因此包括 OrderID 6
是 7<3- 否,是 7<5 -否,是 7 <7-No 因此 OrderID 7 不包括在内,因为指定列表中没有更多值要比较
是 8<3- 否,是 8<5 -否,是 8<7-否,因此不包括 OrderID 8,因为指定列表中没有更多值要比较
是 9<3- 否,是 9<5 -否,是9<7-否,因此 OrderID 9 不包括在内,因为指定列表中没有更多值要比较
是 9<3- 否,是 9<5 -否,是 9<7-否,因此 OrderID 9 不包括在内,因为没有更多的值在指定列表中进行比较


对大于
从 Orders 中选择 OrderID应用相同的逻辑,
其中 OrderID > ANY (3,5,7)

上述查询的答案是:
OrderID
4,5,6,7,8,9,10

于 2020-04-13T16:17:36.270 回答
1

= ANY等价于 IN 运算符。"<>、<、>、<= 或 >=" 其中之一可以放在任何运算符之前。请注意,<> ANY 运算符与 NOT IN 不同。

ANY 和 ALL 运算符与 WHERE 或 HAVING 子句一起使用。

如果任何子查询值满足条件,则 ANY 运算符返回 true。

如果所有子查询值都满足条件,则 ALL 运算符返回 true。

于 2021-02-20T06:15:02.620 回答
1

ANY 和 ALL 运算符与 WHERE 或 HAVING 子句一起使用。

如果任何子查询值满足条件,则 ANY 运算符返回 true。

如果所有子查询值都满足条件,则 ALL 运算符返回 true。

于 2017-11-27T11:11:45.483 回答
0

当我们使用“IN”比较任何列值时,某个集合说{value1,value2 ...}列值必须存在于集合中,但如果是 ANY,我们会像这样进行比较:

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

那么该值必须大于任何一个设定值。

在“全部”的情况下

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

该值必须大于集合中的所有值。

请参阅以下图像以更好地理解:

于 2018-09-04T15:31:33.793 回答
0

(in) 是一种特殊类型的运算符,用于从我们指定的值列表中逐个选择值。而 (any) 与 where 子句一起使用

于 2019-03-05T09:31:31.667 回答