使用(运算符)和使用(运算符)ANY 之间的区别
Difference between using (operator) and using (operator) ANY
我无法区分何时仅使用 =
等运算符以及何时使用 = ANY
。他们看起来和我很像。
例如,这里有两个表,问题是:
编写查询以显示姓名按字母顺序低于客户姓名的销售员。
我的答案是
SELECT * FROM salesman WHERE name < (SELECT cust_name FROM customer);
但正确答案是
SELECT * FROM salesman WHERE name < ANY (SELECT cust_name FROM customer);
,意思是我错过了任何一个。谁能告诉我为什么我错了,什么时候使用 ANY 什么时候不使用。
WHERE name < (SELECT cust_name FROM customer)
如果 customer
中有多于一行,此条件将 return 出错。为什么? <
运算符需要一个 标量 值。可以使用子查询——但前提是它 return 是一列且最多一行。
SQL 提供 ANY
和 ALL
来支持这种结构(和 SOME
与 ANY
相同)。由于问题的措辞你想要 ALL
:
WHERE name < ALL (SELECT cust_name FROM customer)
如果您想要一个小于 最大值 cust_name
的名称,您可以使用:
WHERE name < ANY (SELECT cust_name FROM customer)
一般来说,ANY
和ALL
不常用。大多数人发现聚合更容易遵循:
WHERE name < (SELECT MIN(cust_name) FROM customer)
WHERE name < (SELECT MAX(cust_name) FROM customer)
当 customer
为空时会有细微差别,但这并不重要(或者聚合形式达到预期目的)。
在您的示例中,您没有利用 ANY / ALL 用法,因为您的子查询中没有 where 子句。
请参阅 w3school 中的示例以获得更好的用法https://www.w3schools.com/sql/sql_any_all.asp
< ANY 如果至少有一个子查询为真,则为真
WHERE name < ANY (SELECT cust_name FROM customer WHERE LEN(customer) > 0 )
< ALL 仅当您的所有子查询都为真时才为真
WHERE name < ALL (SELECT cust_name FROM customer WHERE LEN(customer) > 0 )
我无法区分何时仅使用 =
等运算符以及何时使用 = ANY
。他们看起来和我很像。
例如,这里有两个表,问题是:
编写查询以显示姓名按字母顺序低于客户姓名的销售员。
我的答案是
SELECT * FROM salesman WHERE name < (SELECT cust_name FROM customer);
但正确答案是
SELECT * FROM salesman WHERE name < ANY (SELECT cust_name FROM customer);
,意思是我错过了任何一个。谁能告诉我为什么我错了,什么时候使用 ANY 什么时候不使用。
WHERE name < (SELECT cust_name FROM customer)
如果 customer
中有多于一行,此条件将 return 出错。为什么? <
运算符需要一个 标量 值。可以使用子查询——但前提是它 return 是一列且最多一行。
SQL 提供 ANY
和 ALL
来支持这种结构(和 SOME
与 ANY
相同)。由于问题的措辞你想要 ALL
:
WHERE name < ALL (SELECT cust_name FROM customer)
如果您想要一个小于 最大值 cust_name
的名称,您可以使用:
WHERE name < ANY (SELECT cust_name FROM customer)
一般来说,ANY
和ALL
不常用。大多数人发现聚合更容易遵循:
WHERE name < (SELECT MIN(cust_name) FROM customer)
WHERE name < (SELECT MAX(cust_name) FROM customer)
当 customer
为空时会有细微差别,但这并不重要(或者聚合形式达到预期目的)。
在您的示例中,您没有利用 ANY / ALL 用法,因为您的子查询中没有 where 子句。
请参阅 w3school 中的示例以获得更好的用法https://www.w3schools.com/sql/sql_any_all.asp
< ANY 如果至少有一个子查询为真,则为真
WHERE name < ANY (SELECT cust_name FROM customer WHERE LEN(customer) > 0 )
< ALL 仅当您的所有子查询都为真时才为真
WHERE name < ALL (SELECT cust_name FROM customer WHERE LEN(customer) > 0 )