Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  EXISTS または NOT EXISTS を使用したサブクエリー

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

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

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

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

前の例では、t2 に何らかの行が含まれている場合 (NULL 値以外は何も含まれていない行でも)、EXISTS 条件は TRUE です。[NOT] 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 EXISTS クエリーです。つまり、NOT EXISTS 句の中に NOT EXISTS 句が存在します。これは正式には、Stores にないお店が含まれている市は存在しますか? という質問に答えます。ただし、ネストされた NOT EXISTS が、x はすべての y に対して TRUE ですか?という質問に答えるという方が簡単です。


User Comments
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
  Posted by mojgan kavehei on March 10, 2014
Hi,
I wonder if anyone tested the last example "What kind of store is present in all cities?"
it did not work for me, but instead i used this query in below ..

select count(stype), stype , city from cities_stores S group by S.stype having count(stype) = ( select count(distinct D.city) from cities_stores D )

any thought?

Thanks,
Sign Up Login You must be logged in to post a comment.