SQL 速習チュートリアル

SQL EXISTS 演算子

1. SQL EXISTS 演算子

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

サブクエリが少なくとも 1 つのレコードを返す場合、EXISTS 演算子は TRUE と評価され、それ以外の場合は FALSE と評価されます。

1.1 EXISTS の構文

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

2. デモ用データベース

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

ProductIDProductName SupplierIDCategoryID UnitPrice
1Chais1110 boxes x 20 bags18.00
2Chang1124 - 12 oz bottles19.00
3Aniseed Syrup1212 - 550 ml bottles10.00
4Chef Anton's Cajun Seasoning2248 - 6 oz jars22.00
5Chef Anton's Gumbo Mix2336 boxes21.35

こちらは「Suppliers(仕入先)」テーブルの抜粋です。

SupplierID SupplierNameContactName Address CityPostalCode Country
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 SekimaiMusashino-shi100Japan

3. SQL EXISTS の使用例

次の SQL は、価格が 10 未満の製品を扱っている仕入先が存在するかを確認します。サブクエリが TRUE と評価された場合、その製品価格が 10 未満である仕入先をリストアップします。

実行例:

SELECT SupplierName
FROM Suppliers
WHERE EXISTS (
  SELECT ProductName
  FROM Products
  WHERE Products.SupplierID = Suppliers.supplierID AND Price < 10
);

次の SQL は、価格が 22 に等しい製品を扱っている仕入先が存在するかを確認します。サブクエリが TRUE と評価された場合、その製品価格が 22 である仕入先をリストアップします。

実行例:

SELECT SupplierName
FROM Suppliers
WHERE EXISTS (
  SELECT ProductName
  FROM Products
  WHERE Products.SupplierID = Suppliers.supplierID AND Price = 22
);