TOP

SQL ANY 和 ALL 运算符

SQL ANY 和 ALL 说明

SQL 语句 ANY 和 ALL 允许您在一个列的值与一系列其他值之间执行比较。


SQL ANY 描述

ANY 运算符:

  • 返回一个布尔值作为结果
  • 如果子查询值的 ANY 符合条件,则返回 TRUE
  • ANY 表示如果操作对于范围内的任何值都为真,则条件将为真。

    ANY 语法

    SELECT column_name(s)
    FROM table_name
    WHERE column_name operator ANY
      (SELECT column_name
       FROM table_name
       WHERE condition)
    
    该运算符必须是标准比较运算符(=、<>、!=、>、>=、< 或 <=)。

    SQL ALL 描述

    运算符ALL:

  • 返回一个布尔值作为结果
  • 如果 ALL 子查询值符合条件,则返回 TRUE
  • 与 SELECT、WHERE 和 HAVING 运算符一起使用
  • ALL 表示仅当操作对于范围内的所有值都为真时,条件才为真。

    ALL 语法与 SELECT 一起使用

    SELECT ALL column_name(s)
    FROM table_name
    WHERE condition
    

    ALL 语法与 WHERE 或 HAVING 一起使用

    SELECT column_name(s)
    FROM table_name
    WHERE column_name operator ALL
      (SELECT column_name
       FROM table_name
       WHERE condition)
    
    该运算符必须是标准比较运算符(=、<>、!=、>、>=、< 或 <=)。

    演示数据库

    以下是“Northwind”数据库的“Products”(“产品”)表中的示例:

    ProductIDProductNameSupplierIDCategoryIDUnitPrice
    1Chais1110 boxes x 20 bags18.00
    2Chang1124 - 12 oz bottles19.00
    3Aniseed Syrup1212 - 550 ml bottles10.00
    4Chef Anton's Cajun Seasoning2248 - 6 oz jars22.00
    5Chef Anton's Gumbo Mix2236 boxes21.35
    6Grandma's Boysenberry Spread3212 - 8 oz jars25.00
    7Uncle Bob's Organic Dried Pears3712 - 1 lb pkgs.30.00
    8Northwoods Cranberry Sauce3212 - 12 oz jars40.00
    9Mishi Kobe Niku4618 - 500 g pkgs.97.00
    10Ikura4812 - 200 ml jars31.00

    以及表“OrderDetails”(“订单详细信息”)中的示例:

    OrderDetailIDOrderIDProductIDQuantity
    1102481112
    2102484210
    310248725
    410249149
    5102495140
    6102504110
    7102505135
    8102506515
    910251226
    10102515715

    SQL ANY 示例

    以下 SQL 查询如果在 OrderDetails 表中找到 Quantity 值等于 10 的任何 (ANY) 记录,则列出 ProductName(这将返回 TRUE,因为 Quantity 列有一些值为 10):

    Run SQLSELECT ProductName
    FROM Products
    WHERE ProductID = ANY
      (SELECT ProductID
       FROM OrderDetails
       WHERE Quantity = 10)
    

    以下 SQL 查询如果在 OrderDetails 表中找到任何数量大于 99 的 (ANY) 记录,则列出 ProductName(这将返回 TRUE,因为 Quantity 列包含一些大于 99 的值):

    Run SQLSELECT ProductName
    FROM Products
    WHERE ProductID = ANY
      (SELECT ProductID
       FROM OrderDetails
       WHERE Quantity > 99)
    

    另一个 SQL 语句如果在 OrderDetails 表中找到任何数量大于 1000 的 (ANY) 记录,则列出 ProductName(这将返回 FALSE,因为 Quantity 列不包含大于 1000 的值):

    Run SQLSELECT ProductName
    FROM Products
    WHERE ProductID = ANY
      (SELECT ProductID
       FROM OrderDetails
       WHERE Quantity > 1000)
    

    SQL ALL 示例

    以下 SQL 语句列出所有 (ALL) 产品名称:

    Run SQLSELECT ALL ProductName
    FROM Products
    WHERE TRUE
    

    如果 OrderDetails 表中的所有 (ALL) 记录的计数等于 10,则以下 SQL 语句列出 ProductName。 当然,这将返回 FALSE,因为列 Quantity 有许多不同的值(不仅仅是值 10):

    Run SQLSELECT ProductName
    FROM Products
    WHERE ProductID = ALL
      (SELECT ProductID
       FROM OrderDetails
       WHERE Quantity = 10)