SQL ステートメント ANY および ALL を使用すると、1 つの列の値と他の値の範囲とを比較できます。
ANY 演算子:
ANY は、範囲内のいずれかの値に対して操作が true の場合に条件が true になることを意味します。
SELECT column_name(s)
FROM table_name
WHERE column_name operator ANY
(SELECT column_name
FROM table_name
WHERE condition)
オペレーター ALL:
ALL は、範囲内のすべての値に対して操作が true の場合にのみ条件が true になることを意味します。
SELECT ALL column_name(s)
FROM table_name
WHERE condition
SELECT column_name(s)
FROM table_name
WHERE column_name operator ALL
(SELECT column_name
FROM table_name
WHERE condition)
以下は、「Northwind」データベースの「Products」(「Products」) テーブルのサンプルです。
ProductID | ProductName | SupplierID | CategoryID | Unit | Price |
---|---|---|---|---|---|
1 | Chais | 1 | 1 | 10 boxes x 20 bags | 18.00 |
2 | Chang | 1 | 1 | 24 - 12 oz bottles | 19.00 |
3 | Aniseed Syrup | 1 | 2 | 12 - 550 ml bottles | 10.00 |
4 | Chef Anton's Cajun Seasoning | 2 | 2 | 48 - 6 oz jars | 22.00 |
5 | Chef Anton's Gumbo Mix | 2 | 2 | 36 boxes | 21.35 |
6 | Grandma's Boysenberry Spread | 3 | 2 | 12 - 8 oz jars | 25.00 |
7 | Uncle Bob's Organic Dried Pears | 3 | 7 | 12 - 1 lb pkgs. | 30.00 |
8 | Northwoods Cranberry Sauce | 3 | 2 | 12 - 12 oz jars | 40.00 |
9 | Mishi Kobe Niku | 4 | 6 | 18 - 500 g pkgs. | 97.00 |
10 | Ikura | 4 | 8 | 12 - 200 ml jars | 31.00 |
テーブル "OrderDetailss" ("注文の詳細") のサンプル:
OrderDetailID | OrderID | ProductID | Quantity |
---|---|---|---|
1 | 10248 | 11 | 12 |
2 | 10248 | 42 | 10 |
3 | 10248 | 72 | 5 |
4 | 10249 | 14 | 9 |
5 | 10249 | 51 | 40 |
6 | 10250 | 41 | 10 |
7 | 10250 | 51 | 35 |
8 | 10250 | 65 | 15 |
9 | 10251 | 22 | 6 |
10 | 10251 | 57 | 15 |
次の SQL クエリは、OrderDetails テーブル内で Quantity 値が 10 に等しい (ANY) レコードを見つけた場合、ProductName をリストします (Quantity 列の値が 10 であるため、これは TRUE を返します)。
Run SQLSELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10)
次の SQL クエリでは、OrderDetails テーブル内で数量が 99 を超える (ANY) レコードが見つかった場合に、ProductName をリストします (Quantity 列に 99 を超える値が含まれているため、これは TRUE を返します)。
Run SQLSELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity > 99)
別の SQL ステートメントは、OrderDetails テーブル内で 1000 を超える数量を持つ (ANY) レコードが見つかった場合、ProductName をリストします (Quantity 列には 1000 を超える値が含まれていないため、FALSE が返されます)。
Run SQLSELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity > 1000)
次の SQL ステートメントは、すべての (ALL) 製品名をリストします。
Run SQLSELECT ALL ProductName
FROM Products
WHERE TRUE
次の SQL ステートメントは、OrderDetailss テーブル内のすべての (ALL) レコードのカウントが 10 に等しい場合に、ProductName をリストします。 もちろん、列 Quantity にはさまざまな値 (値 10 だけでなく) があるため、これは FALSE を返します。
Run SQLSELECT ProductName
FROM Products
WHERE ProductID = ALL
(SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10)