SQL ANY 与 ALL 操作符

本章节讲解 SQL ANYALL 操作符的用法。


SQL ANY 与 ALL 操作符

ANYALL 运算符允许您在单个列值和一系列其他值之间进行比较。


SQL ANY 操作符

ANY 操作符:

  • 返回一个布尔值作为结果
  • 如果任何子查询值满足条件,则返回 TRUE

ANY 表示如果范围内的任何值的操作为真,则条件为真。

ANY 语法
  1. SELECT column_name(s)
  2. FROM table_name
  3. WHERE column_name operator ANY
  4. (SELECT column_name
  5. FROM table_name
  6. WHERE condition );
注意:运算符必须是标准比较运算符 (=, <>, !=, >, >=, <, or <=).

SQL ALL 操作符

ALL 操作符:

  • 返回一个布尔值作为结果
  • 如果所有子查询值都满足条件,则返回 TRUE
  • 通常与 SELECT, WHEREHAVING 语句一起使用

ALL 表示仅当范围内所有值的操作均为真时,条件才为真。

ALL 与 SELECT 一起使用的语法
  1. SELECT ALL column_name(s)
  2. FROM table_name
  3. WHERE condition ;
ALL 与 WHERE 或 HAVING 一起使用的语法
  1. SELECT column_name(s)
  2. FROM table_name
  3. WHERE column_name operator ALL
  4. (SELECT column_name
  5. FROM table_name
  6. WHERE condition );
注意:运算符必须是标准比较运算符 (=, <>, !=, >, >=, <, or <=).

Demo 数据库

以下是从 Northwind 实例数据库中的 "Products" 表中选择的内容:

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

还有 “OrderDetails” 表中选择的内容:

OrderDetailIDOrderIDProductIDQuantity
1102481112
2102484210
310248725
410249149
5102495140
6102504110
7102505135
8102506515
910251226
10102515715

SQL ANY 实例

如果在 OrderDetails 表中发现任何记录的数量等于 10,则以下 SQL 语句将列出 ProductName(这将返回 TRUE,因为数量列的某些值为 10):

实例
  1. SELECT ProductName
  2. FROM Products
  3. WHERE ProductID = ANY
  4. (SELECT ProductID
  5. FROM OrderDetails
  6. WHERE Quantity = 10);

如果在 OrderDetails 表中发现任何记录的数量大于 99,则以下SQL语句将列出 ProductName(这将返回 TRUE,因为Quantity 列的某些值大于 99):

实例
  1. SELECT ProductName
  2. FROM Products
  3. WHERE ProductID = ANY
  4. (SELECT ProductID
  5. FROM OrderDetails
  6. WHERE Quantity > 99);

如果在 OrderDetails 表中发现任何记录的数量大于 1000,则以下SQL语句将列出 ProductName(这将返回 FALSE,因为Quantity 列没有大于 1000 的值):

实例
  1. SELECT ProductName
  2. FROM Products
  3. WHERE ProductID = ANY
  4. (SELECT ProductID
  5. FROM OrderDetails
  6. WHERE Quantity > 1000);

SQL ALL 实例

以下 SQL 语句列出了所有产品名称:

实例
  1. SELECT ALL ProductName
  2. FROM Products
  3. WHERE TRUE;

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

实例
  1. SELECT ProductName
  2. FROM Products
  3. WHERE ProductID = ALL
  4. (SELECT ProductID
  5. FROM OrderDetails
  6. WHERE Quantity = 10);