【发布时间】:2010-09-13 09:56:58
【问题描述】:
SQL 中的IN 和ANY 运算符有什么区别?
【问题讨论】:
SQL 中的IN 和ANY 运算符有什么区别?
【问题讨论】:
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);
For 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 运算符,您不能使用 =、、、=
【讨论】:
= ANY 时是否有理由使用其中一个? (当然,除了= 之外的其他运算符使用 ANY 因为IN 仅适用于=)
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。
【讨论】:
也许为了更好的理解,这两个条件是等价的。使用哪一个是个人喜好问题(前提是 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)和=ANY,分别用<>ALL来表达子查询。
【讨论】:
使用全部时
选择 empno, 萨尔 来自雇员 哪里 sal > ALL (2000, 3000, 4000);
EMPNO SAL
7839 5000
它会返回相当于查询的结果:
选择 empno, 萨尔 来自雇员 哪里萨尔 > 2000 和萨尔 > 3000 和萨尔 > 4000;
使用任一时
选择 empno, 萨尔 来自雇员 WHERE sal > ANY (2000, 3000, 4000);
EMPNO SAL
7566 2975
7698 2850
7782 2450
7788 3000
7839 5000
7902 3000
返回与
相同的结果选择 empno, 萨尔 来自雇员 其中sal > 2000 或sal > 3000 或sal > 4000;
【讨论】:
使用 ANY,您需要一个运算符:
WHERE X > ANY (SELECT Y FROM Z)
使用 IN,您不能。它总是在测试是否相等。
【讨论】:
SQL SERVER 2008R2 中的 ANY 和 ALL 运算符。
以 > 比较运算符为例,>ALL 表示大于所有值,即大于最大值。例如,>ALL (1, 2, 3) 表示大于 3。>ANY 表示大于至少一个值,即大于最小值。所以 >ANY (1, 2, 3) 表示大于 1。
同理,>ANY 表示对于满足外部查询中指定条件的行,引入子查询的列中的值必须大于子查询返回的值列表中的至少一个值.
【讨论】:
IN - 这很容易理解。查询应该只选择那些在“IN”子句中指定的值。 现在,让我们通过查询来理解“ANY”。 ANY 表示它应该大于或小于列表中的任何值。
假设 Orders 表的 OrderID 从 1 到 10
观察以下查询:
从订单中选择 OrderID
其中 OrderID
上述问题的答案是:
订单编号
1,2,3,4,5,6
解释:查询说查找小于任何指定值的 OrderID。因此数据库搜索并包含 OrderID 如下:
是 1
是 2
是 3
是 4
是 5
是 6
是 7
是 8
是 9
是 9
对大于应用相同的逻辑
从订单中选择 OrderID
其中 OrderID > ANY (3,5,7)
上述问题的答案是:
订单编号
4,5,6,7,8,9,10
【讨论】:
ANY 和 ALL 运算符与 WHERE 或 HAVING 子句一起使用。
如果任何子查询值满足条件,则 ANY 运算符返回 true。
如果所有子查询值都满足条件,则 ALL 运算符返回 true。
【讨论】:
= ANY 相当于 IN 运算符。 "、、=" 其中之一可以放在任何运算符之前。 请注意, ANY 运算符与 NOT IN 不同。
ANY 和 ALL 运算符与 WHERE 或 HAVING 子句一起使用。
如果任何子查询值满足条件,则 ANY 运算符返回 true。
如果所有子查询值都满足条件,则 ALL 运算符返回 true。
【讨论】:
当我们使用“IN”比较任何列值时,某些集合说{value1,value2 ...},那么列值必须存在于集合中,但如果是 ANY,我们会这样比较:
col.value > ANY ({value1,value2,...})
那么该值必须大于任何一个设定值。
如果是“全部”
col.value> ALL({value1,value2,...})
该值必须大于集合中的所有值。
请参阅以下图片以更好地理解:
【讨论】:
(in) 是一种特殊的运算符,用于从我们指定的值列表中逐个选择值。而 (any) 与 where 子句一起使用
【讨论】: