SQL ANY&ALL运算符

use*_*142 21 mysql sql

我已经开始使用sql并且已经听说过很多关于ANYALL运算符的内容.有人可以向我解释他们使用的查询类型以及它们的工作方式吗?

Ada*_*son 33

ANYALL运营商允许执行单柱值和范围内的其他值之间的比较.例如:

select * from Table1 t1 where t1.Col1 < ANY(select value from Table2)
Run Code Online (Sandbox Code Playgroud)

ANY表示如果该范围内的任何值的操作为真,则满足条件.ALL表示仅当该范围内的所有值的操作都为真时才满足条件.

要使用可能更贴近家庭的示例,请执行以下操作:

select * from Table1 t1 where t1.Col1 = ANY(select value from Table2)
Run Code Online (Sandbox Code Playgroud)

这样做是一样的:

select * from Table1 t1 where t1.Col1 in (select value from Table2)
Run Code Online (Sandbox Code Playgroud)

  • 提到 SOME 和 ANY 是同义词。 (2认同)

one*_*hen 6

我已经听说了很多关于ANYALL运算符

我感到有些惊讶:我很少看到他们用过我自己。WHERE val IN (subquery)和更为常见WHERE EXISTS (subquery)

借用@Adam Robinson的示例:

SELECT * 
  FROM Table1 AS t1 
 WHERE t1.Col1 < ANY (
                      SELECT value 
                        FROM Table2
                     );
Run Code Online (Sandbox Code Playgroud)

我通常会看到这样写:

SELECT * 
  FROM Table1 AS t1 
 WHERE EXISTS (
               SELECT *
                 FROM Table2 AS t2
                WHERE t1.Col1 < t2.value
              );
Run Code Online (Sandbox Code Playgroud)

我发现此构造更易于阅读,因为谓词(t1.Col1t2.value)的参数更靠近在一起。