こんにちは!
今回はSQLを使う上で、覚えておくと結構役に立つ「EXISTS」を説明していきます。
そもそも「EXISTS」ってなにかというと
「SQLの実行結果が存在するかどうか」を条件としたいときに利用します。
存在する場合に、SQLを実行することになりますね。
え…?つまり…?どういうこと?
SELECTした結果を使って、さらにSELECTができるってことです。
例えば以下の2つのテーブルから電話番号を登録している人を検索したい場合に使います。
1. ユーザーテーブル
ID | 名前 | 出身 | 性別 |
01 | 上野 | 東京 | 女 |
02 | 小島 | 京都 | 女 |
03 | 佐塚 | 京都 | 男 |
04 | 川名 | 沖縄 | 男 |
2. TELテーブル
ID | TEL |
01 | 000-0000-0000 |
03 | 111-1111-1111 |
■「EXISTS」を使わない場合、以下のようなクエリになります。
SELECT A.* FROM ユーザーテーブル AS A
INNER JOIN TELテーブル AS B ON A.ID = B.ID
■「EXISTS」を使った場合は以下のようなクエリになります。
SELECT A.* FROM ユーザーテーブル AS A
WHERE EXISTS ( SELECT * FROM TELテーブル AS B WHERE A.ID = B.ID )
二つとも結果は以下になりますが、まぁ二つのクエリを見比べてもあまり変わらないっスね。
じゃあ次は電話番号を登録していない人を検索してみましょう!
■「EXISTS」を使わない場合、以下のようなクエリになります。
SELECT A.* FROM ユーザーテーブル AS A
LEFT JOIN TELテーブル AS B ON A.ID = B.ID
WHERE B.電話番号 IS NULL
■「EXISTS」を使った場合は以下のようなクエリになります。
SELECT A.* FROM ユーザーテーブル AS A
WHERE NOT EXISTS ( SELECT * FROM TELテーブル AS B WHERE A.ID = B.ID )
以下のように、二つとも結果は同じですが、 EXISTS
を使わない場合は「内部結合」から「外部結合」に変更して、WHERE句が増えます。
EXISTS
を使う場合は NOT EXISTS
にするだけです。
なので状況に応じて EXISTS
を使用するとクエリがシンプルになる場合があります。
また、EXISTSでしか判定できないような条件の場合が発生するので覚えておいて損はないかなと思います。
それでは次回のuenonの活躍にもご期待してください!
See you next time👉