在 SQL 中,ALL 和 ANY 运算符用于将某个值与子查询返回的一组值进行比较。它们帮助我们根据在多个值上评估的条件来筛选结果。
- ALL:检查条件对于子查询结果中的每一个值是否都为真。
- 必须与比较运算符(如 >、=、<=)结合使用。
- 用于 SELECT、WHERE 和 HAVING 中以进行高级筛选。
目录
SQL ALL
SQL ALL 运算符将一个值与子查询返回的每一个值进行比较。只有当条件对子查询结果中的所有值都成立时,使用 ALL 的条件才为 TRUE(真)。
- 必须与比较运算符结合使用:>、=、<=。
- 适用于基于与多条记录进行比较来筛选数据。
示例: 首先,我们将创建一个演示用的 SQL 数据库和表,并在其上使用 ALL 命令。
!productsProducts 表
查询语句:
SELECT * FROM Products
WHERE Price > ALL (SELECT Price FROM Products WHERE Price < 500);
输出结果:
!ALL
语法:
SELECT column_name(s)
FROM table_name
WHERE column_name comparison_operator ALL
(SELECT column_name
FROM table_name
WHERE condition(s));
- comparison_operator(比较运算符): 这是比较运算符,可以是 =、>、=、<=、 等中的一个。
- subquery(子查询): 这是一个查询,它返回要与外部查询中的列进行比较的一组值。
SQL ALL 与 SELECT、WHERE 和 HAVING 的结合使用
ALL 运算符可以与 SELECT、WHERE 和 HAVING 语句结合使用,以细化我们的数据筛选。
Products 表
OrderDetails 表
!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20251115110704794098/Orderdetails.png">Orderdetails
示例 1:从 Products 表中检索所有产品名称。查询语句:
SELECT ALL ProductName
FROM Products
WHERE TRUE;
输出结果:
此查询从 Products 表中检索所有产品名称,因为 TRUE 对于每一行来说总是评估为真。
示例 2:如果 OrderDetails 表中的所有记录的数量都为 6 或 2,则检索产品名称。
SELECT ProductName
FROM Products
WHERE ProductID = ALL (SELECT ProductID
FROM OrderDetails
WHERE Quantity = 6 OR Quantity = 2);
输出结果:
!chef
此查询确保返回的产品名称在 OrderDetails 表中的所有数量均为 6 或 2。
示例 3:查找订单中的最大数量超过所有订单平均数量的 OrderID。
SELECT OrderID
FROM OrderDetails
GROUP BY OrderID
HAVING MAX(Quantity) > ALL (SELECT AVG(Quantity)
FROM OrderDetails
GROUP BY OrderID);
输出结果:
!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20251115113316313448/Orderid.png">Orderid
此查询筛选出了最大数量大于订单平均数量的 OrderID。
SQL ANY 运算符?
ANY 将一个值与列表中的每个值或查询结果进行比较,如果内部查询的结果至少包含一行满足条件,则评估为真。
- 如果子查询的值中有任何一个满足条件,ANY 返回 true。
- ANY 前面必须加上比较运算符。
示例:首先,我们将创建一个演示用的 SQL 数据库和表,并在其上使用 ANY 命令。
!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20251115113523150442/Productsid.png">Productsid
查询语句:
SELECT * FROM Products
WHERE Price 500);
输出结果:
语法:
SELECT column_name(s)
FROM table_name
WHERE column_name comparison_operator ANY
(SELECT column_name
FROM table_name
WHERE condition(s));
SQL ANY 与 SELECT、WHERE 和 HAVING 的结合使用
ANY 运算符可以与 SELECT、WHERE 和 HAVING 子句一起使用,通过与子查询结果中的任何值匹配条件来筛选数据。
示例 1:查找出现在 OrderDetails 表中的产品的不同 CategoryID。
查询语句:
SELECT DISTINCT CategoryID
FROM Products
WHERE ProductID = ANY (SELECT ProductID
FROM OrderDetails);
输出结果:
!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20251115114159263645/categoryid.png">categoryid