ここではEXISTS句を用いた副問合せを紹介します.
EXISTS句は存在検査ともいわれ,副問合せによって返されたレコードが一つでもあれば真,一つもなければ偽を返します.EXISTS句を用いる場合は,相関副問合せを利用することが多いです.相関副問合せとは副問合せ側で,その外側(主問合せ)の列を参照する形式のことをいいます.EXISTS句および相関副問合せの基本的な構文は以下の通りです.
SELECT 列名1, 列名2, ...
FROM テーブル名 AS 相関名
WHERE EXISTS (
SELECT 列名
FROM テーブル名
[WHERE 条件式など(相関)]
)
例として以下のテーブルから1件以上の受注実績を持つ社員を取得します.
受注
注文番号 | 商品コード | 担当コード |
---|---|---|
01-101 | A001 | 00001 |
01-102 | A002 | 00001 |
01-103 | B002 | 00004 |
01-104 | D001 | 00005 |
社員
社員コード | 社員名 |
---|---|
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のデータが存在しませんので,偽となり値は抽出されません.