こんにちは!
今回はSQLを使う上で、覚えておくと結構役に立つ「EXISTS」を説明していきます。

そもそも「EXISTS」ってなにかというと
「SQLの実行結果が存在するかどうか」を条件としたいときに利用します。
存在する場合に、SQLを実行することになりますね。

え…?つまり…?どういうこと?
SELECTした結果を使って、さらにSELECTができるってことです。
例えば以下の2つのテーブルから電話番号を登録している人を検索したい場合に使います。

1. ユーザーテーブル

ID名前出身性別
01上野東京
02小島京都
03佐塚京都
04川名沖縄

2. TELテーブル

IDTEL
01000-0000-0000
03111-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 )

二つとも結果は以下になりますが、まぁ二つのクエリを見比べてもあまり変わらないっスね。

01    上野    東京    女
03    佐塚    京都    男

じゃあ次は電話番号を登録していない人を検索してみましょう!

■「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でしか判定できないような条件の場合が発生するので覚えておいて損はないかなと思います。

02    小島    京都    女
04    川名    沖縄    男

それでは次回のuenonの活躍にもご期待してください!
See you next time👉