我无法区分何时只使用像=这样的运算符和何时使用= ANY。他们看起来和我很像。例如,这里有两个表,问题是:编写一个查询以显示按字母顺序低于客户名称的销售人员。我的答案是
SELECT * FROM salesman WHERE name < (SELECT cust_name FROM customer);但正确的答案是
SELECT * FROM salesman WHERE name < ANY (SELECT cust_name FROM customer);意思是我漏掉了一个。谁能告诉我为什么我错了,什么时候该用,什么时候不用。

发布于 2021-03-29 15:05:54
WHERE name < (SELECT cust_name FROM customer)如果customer中有多行,则此条件将返回一个错误。为什么?<操作符需要一个标量值。可以使用子查询--但只有在返回一列最多一行的情况下才能使用。
SQL提供了ANY和ALL来支持这样的构造(以及与ANY相同的SOME )。随着问题的措辞,你想要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为空时,有一个细微的区别,但这很少是重要的(或者聚合形式完成了预期的操作)。
发布于 2021-03-29 15:36:53
在您的示例中,您没有充分利用任何/所有用法,因为您的子查询中没有where子句。
参见w3school中的示例以获得更好的使用https://www.w3schools.com/sql/sql_any_all.asp
如果您的子查询中至少有一个为真,则<任何都为真
WHERE name < ANY (SELECT cust_name FROM customer WHERE LEN(customer) > 0 )只有当您的所有子查询都为真时,<所有才为真
WHERE name < ALL (SELECT cust_name FROM customer WHERE LEN(customer) > 0 )https://stackoverflow.com/questions/66856612
复制相似问题