SQL | ALL 和 ANY 运算符详解

在 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 表

!products

OrderDetails 表

!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20251115110704794098/Orderdetails.png">Orderdetails

示例 1:从 Products 表中检索所有产品名称。查询语句:

SELECT ALL ProductName 
FROM Products
WHERE TRUE;

输出结果:

!ProductName

此查询从 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);

输出结果:

!ANY-clause

语法:

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

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/25899.html
点赞
0.00 平均评分 (0% 分数) - 0