トップDML選択(副問合せ) ≫ EXISTS句を用いた副問合せ(相関副問合せ)

EXISTS句を用いた副問合せ(相関副問合せ)

ここではEXISTS句を用いた副問合せを紹介します.

EXISTSと相関副問合せ

EXISTS句は存在検査ともいわれ,副問合せによって返されたレコードが一つでもあれば真,一つもなければ偽を返します.EXISTS句を用いる場合は,相関副問合せを利用することが多いです.相関副問合せとは副問合せ側で,その外側(主問合せ)の列を参照する形式のことをいいます.EXISTS句および相関副問合せの基本的な構文は以下の通りです.

SELECT 列名1, 列名2, ...
FROM テーブル名 AS 相関名
WHERE EXISTS (
    SELECT 列名
    FROM テーブル名
    [WHERE 条件式など(相関)]
)

SQL サンプル

例として以下のテーブルから1件以上の受注実績を持つ社員を取得します.

受注

注文番号商品コード担当コード
01-101A00100001
01-102A00200001
01-103B00200004
01-104D00100005

社員

社員コード社員名
00001チャーリー
00002ルシール
00003ライナス
00004シュローダー
00005ペパーミント
00006マーシー

SQL

SELECT 社員コード, 社員名
FROM 社員 AS x
WHERE EXISTS (
    SELECT * FROM 受注
    WHERE 担当コード = x.社員コード
)

結果

社員コード社員名
00001チャーリー
00004シュローダー
00005ペパーミント

社員テーブルの1行目の社員コードは00001です.受注テーブルに担当コードが00001のデータが存在しますので,EXISTS句の評価は真となり値が抽出されます.社員テーブルの2行目の社員コードは00002です.受注テーブルには担当コードが00002のデータが存在しませんので,偽となり値は抽出されません.