13.2.11.6 EXISTS または NOT EXISTS を持つサブクエリ
サブクエリがすべての行を返す場合。 EXISTS は、subqueryTRUENOT EXISTS は、subqueryFALSEです。 例えば、以下のようになります。
SELECT column1 FROM t1 WHERE EXISTS (SELECT * FROM t2);
伝統的に、EXISTSSELECT *SELECT 5SELECT column1 などで始まることもあります。 MySQL は、このようなサブクエリの SELECT リストを無視するので、違いはありません。
前述の例では、t2EXISTSTRUE EXISTS サブクエリにはほとんどの場合、相関関係が含まれているので、これは実際にはあり得ない例です。
-
1つまたは複数の都市に存在する店舗の種類は?
SELECT DISTINCT store_type FROM stores WHERE EXISTS (SELECT * FROM cities_stores WHERE cities_stores.store_type = stores.store_type); -
どのようなお店がどの都市にも存在しないか?
SELECT DISTINCT store_type FROM stores WHERE NOT EXISTS (SELECT * FROM cities_stores WHERE cities_stores.store_type = stores.store_type); -
すべての都市にあるのはどんなお店ですか?
SELECT DISTINCT store_type FROM stores s1 WHERE NOT EXISTS ( SELECT * FROM cities WHERE NOT EXISTS ( SELECT * FROM cities_stores WHERE cities_stores.city = cities.city AND cities_stores.store_type = stores.store_type));
最後の例は、二重に入れ子になった NOT EXISTSNOT EXISTSNOT EXISTSStoresNOT EXISTSxTRUE for all yであるか」という質問に答えると言った方が簡単です。”
MySQL 8.0.19以降では、NOT EXISTSNOT EXISTSTABLEを添えて、以下のようにサブクエリで使用することもできます。
SELECT column1 FROM t1 WHERE EXISTS (TABLE t2);
SELECT *句を入れない場合と同じ結果になります
。