前回のANY/SOMEやALLからの流れから、今回はEXISTSについて説明しようと思います。
EXISTSには二種類の使用方法があり、「存在判定」と「相関副問い合わせ」と言われています。
今回は存在判定について説明します。
Code | Name |
---|---|
01 | 田中 |
02 | 鈴木 |
03 | 中村 |
04 | 山崎 |
Code | Score |
---|---|
01 | 80 |
02 | 90 |
まずは、上記のような二種類のテーブルを用意します。
SQL
SELECT * FROM TABLE1
WHERE EXISTS (
SELECT * FROM TABLE2
WHERE TABLE2.Code = '02')
AND TABLE1.Name = '中村' ;
このとき、カッコの内側のSQLの抽出条件であるTABLE1.Code = '02'のレコードが存在しているので、カッコの外側のSQLも実行されます。
結果は以下の通りです。
Code | Name |
---|---|
03 | 中村 |
もうひとつ、SQLを実行してみます。
カッコの内側のSQLの抽出条件だけ変更しています。
SQL
SELECT * FROM TABLE1
WHERE EXISTS (
SELECT * FROM TABLE2
WHERE TABLE2.Code = '03')
AND TABLE1.Name = '中村' ;
TABLE2にはCode = '03'に該当するレコードがないため、外側のSQLは実行されません。
このため、もしこのSQLを実行してもなにも抽出されません。