ALL & ANY是 SQL 中的逻辑运算符。结果它们返回布尔值。
全部
ALL运算符用于选择 SELECT STATEMENT 的所有元组。它还用于将一个值与另一个值集中的每个值或来自子查询的结果进行比较。
- 如果所有子查询值都满足条件,则 ALL运算符返回 TRUE。该ALL必须由运算符相比前面,如果所有的子查询值满足条件判断为真。
- ALL 与 SELECT、WHERE、HAVING 语句一起使用。
ALL 与 SELECT 语句:
Syntax:
SELECT ALL field_name
FROM table_name
WHERE condition(s);
ALL 与 WHERE 或 HAVING 声明:
Syntax:
SELECT column_name(s)
FROM table_name
WHERE column_name comparison_operator ALL
(SELECT column_name
FROM table_name
WHERE condition(s));
例子:
考虑以下产品表和订单详细信息表,
查询
- 找到所有产品的名称。
SELECT ALL ProductName FROM Products WHERE TRUE;
输出:
- 如果 OrderDetails 中的所有记录的 Quantity 等于 6 或 2,则查找产品的名称。
SELECT ProductName FROM Products WHERE ProductID = ALL (SELECT ProductId FROM OrderDetails WHERE Quantity = 6 OR Quantity = 2);
输出:
- 查找该 OrderID 的所有产品中最大数量大于所有 OrderID 平均数量的 OrderID。
SELECT OrderID FROM OrderDetails GROUP BY OrderID HAVING max(Quantity) > ALL (SELECT avg(Quantity) FROM OrderDetails GROUP BY OrderID);
输出:
任何
ANY 将一个值与列表中的每个值或查询结果进行比较,如果内部查询的结果至少包含一行,则计算结果为真。
- 如果任何子查询值满足条件,则 ANY 返回 true。
- 任何必须由运算符相比前面。
句法:
SELECT column_name(s)
FROM table_name
WHERE column_name comparison_operator ANY
(SELECT column_name
FROM table_name
WHERE condition(s));
查询
- 查找在 OrderDetails 表中有任何记录的产品的 Distinct CategoryID。
SELECT DISTINCT CategoryID FROM Products WHERE ProductID = ANY (SELECT ProductID FROM OrderDetails);
输出:
- 在 OrderDetails 表中查找 Quantity = 9 的任何记录。
SELECT ProductName FROM Products WHERE ProductID = ANY (SELECT ProductID FROM OrderDetails WHERE Quantity = 9);