SQL ANYおよびALL演算子
SQL ANYおよびALL演算子
ANY
とALL
演算子を使用すると、1つの列の値と他の値の範囲を比較できます。
SQL ANY演算子
ANY
演算子
- 結果としてブール値を返します。
- いずれかのサブクエリ値が条件を満たす場合にTRUEを返します。
ANY
は、範囲内のいずれかの値に対して操作がtrueの場合、条件がtrueになることを意味します。
ANY構文
SELECT <em>column_name(s)</em>
FROM <em>table_name</em>
WHERE <em>column_name operator</em> ANY
(SELECT <em>column_name
</em>FROM <em>table_name
</em>WHERE <em>condition</em>);
注: *演算子*は、標準の比較演算子(=、<>、!=、>、>=、<、または <=)である必要があります。
SQL ALL演算子
ALL
演算子:
- 結果としてブール値を返します。
- すべてのサブクエリ値が条件を満たす場合にTRUEを返します。
SELECT
、WHERE
とHAVING
ステートメントで使用されます。
ALL
は、範囲内のすべての値に対して操作がtrueである場合にのみ、条件がtrueになることを意味します。
SELECTを使用したALL構文
SELECT ALL <em>column_name(s)</em>
FROM <em>table_name</em>
WHERE <em>condition</em>;
WHEREまたはHAVINGを使用したALL構文
SELECT <em>column_name(s)</em>
FROM <em>table_name</em>
WHERE <em>column_name operator</em> ALL
(SELECT <em>column_name
</em>FROM <em>table_name
</em>WHERE <em>condition</em>);
注: *演算子*は、標準の比較演算子(=、<>、!=、>、>=、<、または <=)である必要があります。
デモデータベース
以下は、Northwindサンプルデータベースの"製品"テーブルからの抜粋です。
製品番号 |
商品名 |
サプライヤーID |
カテゴリーID |
ユニット |
価格 |
---|---|---|---|---|---|
1 | chais | 1 | 1 | 10箱×20袋 | 18 |
2 | chang | 1 | 1 | 24~12オンスのボトル | 19 |
3 | Aniseed Syrup | 1 | 2 | 12 - 550 ml ボトル | 10 |
4 | Chef Anton's Cajun Seasoning | 2 | 2 | 48 - 6オンスの瓶 | 22 |
5 | Chef Anton's Gumbo Mix | 2 | 2 | 36箱 | 21.35 |
6 | おばあちゃんのボイセンベリースプレッド | 3 | 2 | 12~8オンスの瓶 | 25 |
7 | ボブおじさんの有機干し梨 | 3 | 7 | 12~1ポンドのパッケージ | 30 |
8 | ノースウッズクランベリーソース | 3 | 2 | 12~12オンスの瓶 | 40 |
9 | 神戸牛 | 4 | 6 | 18~500gパッケージ | 97 |
そして、"注文詳細"テーブルからの選択
注文明細ID |
オーダーID |
製品番号 |
量 |
---|---|---|---|
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 ANYの例
次のSQLステートメントは、OrderDetailsテーブル内にQuantityが10に等しいレコードが見つかった場合に、ProductNameを一覧表示します(Quantity列に10の値があるため、TRUEが返されます)。
例
SELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10);
次のSQLステートメントは、OrderDetailsテーブル内に99より大きい数量を持つレコードが見つかった場合に、ProductNameを一覧表示します(Quantity列に99より大きい値があるため、TRUEが返されます)。
例
SELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity > 99);
次のSQLステートメントは、OrderDetailsテーブル内にQuantityが1000を超えるレコードが見つかった場合にProductNameを一覧表示します(Quantity列には1000を超える値がないため、FALSEが返されます)。
例
SELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity > 1000);
SQL ALLの例
次のSQLステートメントは、すべての製品名を一覧表示します。
次のSQLステートメントは、OrderDetailsテーブルのすべてのレコードのQuantityが10の場合に、ProductNameを一覧表示します。もちろん、Quantity列には(10の値だけでなく)さまざまな値が含まれるため、これはFALSEを返します。
例
SELECT ProductName
FROM Products
WHERE ProductID = ALL
(SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10);
プログラミング学習を加速させる
プログラミングをプロの講師に教えてもらいませんか。