MySQL EXISTS 演算子
1. MySQL EXISTS 演算子の概要
EXISTS 演算子は、WHERE 句内でサブクエリが何らかの行(レコード)を返すかどうかを確認するために使用されます。
この演算子は、サブクエリが少なくとも 1 つの行を返せば TRUE となり、そうでなければ FALSE と評価されます。
2. EXISTS の基本構文
SELECT カラム名(s)
FROM テーブル名
WHERE EXISTS (サブクエリ);3. デモ用データベース
以下は、Northwind サンプルデータベースの「Products(製品)」テーブルの抜粋です。
| ProductID | ProductName | SupplierID | CategoryID | UnitPrice |
|---|---|---|---|---|
| 1 | Chais | 1 | 1 | 18.00 |
| 2 | Chang | 1 | 1 | 19.00 |
| 3 | Aniseed Syrup | 1 | 2 | 10.00 |
| 4 | Chef Anton's Cajun Seasoning | 2 | 2 | 22.00 |
| 5 | Chef Anton's Gumbo Mix | 2 | 2 | 21.35 |
次に、「Suppliers(仕入先)」テーブルの抜粋です。
| SupplierID | SupplierName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Exotic Liquid | Charlotte Cooper | 49 Gilbert St. | London | EC1 4SD | UK |
| 2 | New Orleans Cajun Delights | Shelley Burke | P.O. Box 78934 | New Orleans | 70117 | USA |
| 3 | Grandma Kelly's Homestead | Regina Murphy | 707 Oxford Rd. | Ann Arbor | 48104 | USA |
| 4 | Tokyo Traders | Yoshi Nagase | 9-8 Sekimai | Tokyo | 100 | Japan |
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
);