SQL中的IN
和运算符有什么区别?ANY
11 回答
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 运算符,您不能使用 =、<>、<、>、<= 或 >=
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)
and =ANY
,resp. <>ALL
for sub-queries.
在使用所有
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;
使用 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 < 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
= ANY等价于 IN 运算符。"<>、<、>、<= 或 >=" 其中之一可以放在任何运算符之前。请注意,<> ANY 运算符与 NOT IN 不同。
ANY 和 ALL 运算符与 WHERE 或 HAVING 子句一起使用。
如果任何子查询值满足条件,则 ANY 运算符返回 true。
如果所有子查询值都满足条件,则 ALL 运算符返回 true。
ANY 和 ALL 运算符与 WHERE 或 HAVING 子句一起使用。
如果任何子查询值满足条件,则 ANY 运算符返回 true。
如果所有子查询值都满足条件,则 ALL 运算符返回 true。
(in) 是一种特殊类型的运算符,用于从我们指定的值列表中逐个选择值。而 (any) 与 where 子句一起使用