MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む

このページは機械翻訳したものです。

13.2.11.6 EXISTS または NOT EXISTS を使用したサブクエリー

サブクエリーが少なくとも 1 行を返す場合、EXISTS subquery は TRUE であり、NOT EXISTS subquery は FALSE です。 例:

SELECT column1 FROM t1 WHERE EXISTS (SELECT * FROM t2);

従来より、EXISTS サブクエリーは SELECT * で始まりますが、SELECT 5 や SELECT column1、あるいはほかの何で始まってもかまいません。 MySQL はこのようなサブクエリー内の SELECT リストを無視するため、何も違いは生まれません。

前の例では、t2 に何らかの行が含まれている場合 (NULL 値以外は何も含まれていない行でも)、EXISTS 条件は TRUE です。 [NOT] EXISTS サブクエリーには、ほぼ常に相互関係が含まれるため、これは実際にはありそうにもない例です。 次に、より現実的な例をいくつか示します。

最後の例は、二重にネストされた NOT EXISTS クエリーです。 つまり、NOT EXISTS 句の中に NOT EXISTS 句が存在します。 これは正式には、「Stores にないお店が含まれている市は存在しますか」? という質問に答えます。 ただし、ネストされた NOT EXISTS が、「x はすべての y に対して TRUE ですか?」という質問に答えるという方が簡単です。

MySQL 8.0.19 以降では、次のように、NOT EXISTS または NOT EXISTS を TABLE とともにサブクエリーで使用することもできます:

SELECT column1 FROM t1 WHERE EXISTS (TABLE t2);

結果は、サブクエリーで WHERE 句を指定せずに SELECT * を使用した場合と同じです。