MySQL 速習チュートリアル

MySQL ANY 演算子

1. MySQL ANY 演算子の概要

ANY 演算子は、値をサブクエリによって返されたすべての値と比較するために使用されます。

サブクエリの結果セット内の少なくとも1つの値が条件を満たしている場合、ANY 演算子は TRUE と評価されます。

2. ANY の基本構文

SELECT カラム名(s)
FROM テーブル名
WHERE カラム名 比較演算子 ANY (サブクエリ);

       注意:比較演算子 には、標準的な比較演算子(=<>!=>>=<、または <=)を使用する必要があります。

3. デモ用データベース

以下は、Northwind サンプルデータベースの「Products(製品)」テーブルからの抜粋です。

ProductIDProductNamePrice
1Chais18.00
2Chang19.00
3Aniseed Syrup10.00
4Chef Anton's Cajun Seasoning22.00

次に、「OrderDetails(注文詳細)」テーブルの抜粋です。

OrderDetailIDProductIDQuantity
11112
24210
3725
4149

4. MySQL ANY の使用例

4.1 等号(=)を用いた例

次の SQL は、「OrderDetails」テーブル内に数量(Quantity)が 10 に等しいレコードが 1つでも 存在する場合に、その ProductName を返します(Quantity カラムに 10 という値がいくつか存在するため、これは TRUE を返します)。

-- 数量が 10 の注文が少なくとも一つ存在する製品を取得します
SELECT ProductName FROM Products
WHERE ProductID = ANY (
  SELECT ProductID
  FROM OrderDetails
  WHERE Quantity = 10
);

4.2 不等号(>)を用いた例:条件一致ケース

次の SQL は、「OrderDetails」テーブル内に数量が 99 より大きいレコードが 1つでも 存在する場合に、その ProductName を返します(Quantity カラムに 99 より大きい値が存在するため、これは TRUE を返します)。

-- 数量が 99 を超える注文が少なくとも一つ存在する製品を取得します
SELECT ProductName FROM Products
WHERE ProductID = ANY (
  SELECT ProductID
  FROM OrderDetails
  WHERE Quantity > 99
);

4.3 不等号(>)を用いた例:条件不一致ケース

次の SQL は、「OrderDetails」テーブル内に数量が 1000 より大きいレコードが 1つでも 存在する場合に、その ProductName を返します(Quantity カラムに 1000 より大きい値は存在しないため、これは FALSE を返します)。

-- 数量が 1000 を超える注文は存在しないため、結果は空になります
SELECT ProductName FROM Products
WHERE ProductID = ANY (
  SELECT ProductID
  FROM OrderDetails
  WHERE Quantity > 1000
);