MySQL 速習チュートリアル

MySQL EXISTS 演算子

1. MySQL EXISTS 演算子の概要

EXISTS 演算子は、WHERE 句内でサブクエリが何らかの行(レコード)を返すかどうかを確認するために使用されます。

この演算子は、サブクエリが少なくとも 1 つの行を返せば TRUE となり、そうでなければ FALSE と評価されます。

2. EXISTS の基本構文

SELECT カラム名(s)
FROM テーブル名
WHERE EXISTS (サブクエリ);

3. デモ用データベース

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

ProductIDProductNameSupplierIDCategoryIDUnitPrice
1Chais1118.00
2Chang1119.00
3Aniseed Syrup1210.00
4Chef Anton's Cajun Seasoning2222.00
5Chef Anton's Gumbo Mix2221.35

次に、「Suppliers(仕入先)」テーブルの抜粋です。

SupplierIDSupplierNameContactNameAddressCityPostalCodeCountry
1Exotic LiquidCharlotte Cooper49 Gilbert St.LondonEC1 4SDUK
2New Orleans Cajun DelightsShelley BurkeP.O. Box 78934New Orleans70117USA
3Grandma Kelly's HomesteadRegina Murphy707 Oxford Rd.Ann Arbor48104USA
4Tokyo TradersYoshi Nagase9-8 SekimaiTokyo100Japan

4. MySQL EXISTS の使用例

次の SQL は、価格(Price)が 20 未満の商品を 1 つでも持っている仕入先がいるかどうかを確認します。サブクエリが TRUE と評価された場合、その仕入先(SupplierName)をリストアップします。

-- 価格が 20 未満の商品を扱う仕入先を抽出します
SELECT SupplierName FROM Suppliers
WHERE EXISTS (
  SELECT ProductName
  FROM Products
  WHERE Products.SupplierID = Suppliers.SupplierID AND Price < 20
);

次の SQL は、価格がちょうど 22 の商品を 1 つでも持っている仕入先がいるかどうかを確認します。条件に一致する行があれば、その仕入先名を返します。

-- 特定の価格(22)の商品を扱っている仕入先を抽出します
SELECT SupplierName FROM Suppliers
WHERE EXISTS (
  SELECT ProductName
  FROM Products
  WHERE Products.SupplierID = Suppliers.SupplierID AND Price = 22
);