sql中的in和任何运算符之间的区别

Jag*_*gan 36 sql operators any

SQL中的INANY运算符有什么区别?

Pra*_*ana 33

SQL>
SQL> -- Use the ANY operator in a WHERE clause to compare a value with any of the values in a list.
SQL>
Run Code Online (Sandbox Code Playgroud)

SQL> - 您必须在任何之前放置一个=,<>,<,>,<=或> =运算符.

SQL>
SQL> SELECT *
  2  FROM employee
  3  WHERE salary > ANY (2000, 3000, 4000);
Run Code Online (Sandbox Code Playgroud)

对于In Operator

SQL> -- Use the IN operator in a WHERE clause to compare a value with any of the values in a list.
Run Code Online (Sandbox Code Playgroud)

但是使用In你不能使用=,<>,<,>,<=或> =

  • 在做`= ANY`时是否有理由使用一个?(当然,除了 `=` 之外,其他运算符使用 ANY,因为 `IN` 仅用于 `=`) (3认同)

Tej*_*tel 17

IN->等于列表中的任何一个.

ANY->比较子查询返回的每个值的值.

所有>比较子查询返回的每个值的值.

例如:

IN:(Q):显示所有薪资与部门最低投资匹配的员工的详细信息?

(A):SQL>从Emp Where Sal IN中选择Ename Sal Deptno(从Deptno选择Min(Sal)来自Emp Group);

任何:

Meaans小于列表中的最大值.

(问):获取所有员工的详细信息,这些员工的收入低于最高收入员工控制其他员工?

(A):SQL>从Emp Where Sal选择Empno Ename Job Sl

任何: - > Meaans超过列表中的最小值.

(问):获取所有收入超过10部门最低收入的所有人的详细信息?

(A):SQL>从Emp选择Empno Ename Job Sal,其中Sal> Any(选择Min(Sal)From Emp Where Deptno 10);

任何: - >它相当于In Operator.

注意:'Some'也用于任何内容.


Wer*_*eit 11

也许为了更好地理解,这两个条件是等价的.你使用的是一个品味问题(如果RDBMS支持它们)

... WHERE x IN (SELECT Y FROM THE_TABLE)  
... WHERE x =ANY (SELECT Y FROM THE_TABLE) 
Run Code Online (Sandbox Code Playgroud)

这些也是

... WHERE x NOT IN (SELECT Y FROM THE_TABLE) 
... WHERE x <>ALL (SELECT Y FROM THE_TABLE) 
Run Code Online (Sandbox Code Playgroud)

其实我个人的习惯是使用IN了列表表达式(如WHERE x IN (2,4,6,8)=ANY,RESP.<>ALL为子查询.


Man*_*val 7

虽然全部使用

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

 EMPNO        SAL
Run Code Online (Sandbox Code Playgroud)
  7839       5000
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)
  7566       2975
  7698       2850
  7782       2450
  7788       3000
  7839       5000
  7902       3000
Run Code Online (Sandbox Code Playgroud)

返回与...相同的结果

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


小智 5

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

假设一个 Orders 表的 OrderID 从 1 到 10

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

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

解释:查询表示查找小于任意指定值的 OrderID。因此,数据库搜索并包含 OrderID,如下所示:
Is 1<3- 是,因此包含 OrderID 1
Is 2<3- 是,因此包含 OrderID 2
Is 3<3- 否,is 3<5 - 是(指定为 5)值),因此包含 OrderID 3
Is 4<3- 否,为 4<5 - 是,因此包含 OrderID 4
Is 5<3- 否,为 5<5 -否,为 5<7(指定为 5值)-是,因此包含 OrderID 5
是 6<3- 否,是 6<5 -否,是 6<7-是,因此包含 OrderID 6 是 7<
3- 否,是 7<5 -否,是 7 <7-否,因此不包含 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,因为指定列表中没有更多值可供比较


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

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