もしサブクエリーが行を返せば、EXISTS
           は
          subqueryTRUE
          で、NOT EXISTS
           は
          subqueryFALSE です。例 :
        
SELECT column1 FROM t1 WHERE EXISTS (SELECT * FROM t2);
          もともと、EXISTS
          サブクエリーは SELECT
          *
          で開始しますが、SELECT
          5 や SELECT
          column1、またそれ以外のどんなものでも開始することができます。MySQL
          はそのようなサブクエリーの中では
          SELECT
          リストを無視するので、何も変わらないのです。
        
          先ほどの例では、もし
          t2 が
          NULL
          値しか含まないものでも良いので、何かの行を含むのなら、EXISTS
          の条件は TRUE
          となります。[NOT]
          EXISTS
          サブクエリーは通常相互関係を持つので、実際はこれはよくあるような例ではありません。ここに、もう少し現実的な例があります。
        
複数の町には、どんな種類のお店がありますか?
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
          ですか」、という質問に答えるという方が簡単です。
        

