2020/02/15SQLのEXISTS句のサンプルです。テーブルを結合しない場合(存在判定)テーブルを結合する場合(相関副問合せ)exists句とは上記は、exists句を使用した図です。whereの後にexistsがあり、exists内でSQLを記述できます。この時、外側のSQLにあるテーブルとexists内のSQLにあるテーブルを結合する/しないで抽出されるデータが異なります。1.結合しない場合、exists内のSQLで値が存在したとき、外側のSQLが実行されます。exists内のSQLで値が存在しないときは、外側のSQLは実行されません。(存在判定)2.結合した場合、外側のSQLが実行されてexists内のSQLが実行されます。これは相関副問合せと呼ばれます。テーブルを結合しない場合(存在判定)テーブルを結合しない場合のサンプルです。以下、2つのテーブルがあるとします。1つめのsyainテーブルです。sato2つめのsalesテーブルです。りんごSQL文exits句内で、上記のsalesテーブルでidを指定します。2)1行目は、syainテーブルです。4行目は、salesテーブルのidに2を指定しています。この場合、exists句内のSQLを実行した結果、データが存在した場合、外側のSQLが実行されます。結果は、以下のとおりです。satosalesテーブルにid=2は存在するので外側のSQLが実行されsyainテーブルの全件数が抽出されます。仮にid=5と指定した場合は、外側のSQLは実行されず、何も抽出されません。テーブルを結合する場合(相関副問合せ)テーブルを結合する場合のサンプルです。以下、2つのテーブルがあるとします。1つめのsyainテーブルです。sato2つめのsalesテーブルです。りんごSQL文exits句内で、上記のsalesテーブルのidとsyainテーブルのidで結合します。syain.id)1行目は、syainテーブルです。4行目は、salesテーブルのidとsyainテーブルのidで結合しています。exists句内(副問い合わせ)の中に外側のSQL(主問い合わせ)の項目(syain.id)があります。→SQLは相関副問合せになります。この場合、外側のSQL(主問い合わせ)を実行し、そこで取得した行でexists句内(副問い合わせ)のSQLを実行します。3行目のselectの後の項目は使用されません。任意の値を設定できます。結果は、以下のとおりです。tanakasyainテーブルとsalesテーブルの両方に存在するid2のsyainのデータが抽出されます。