“商品”表 及び“自社製品”表に対して次のSQL文を実行した結果、得られる行数として正しいものはどれか。ここで、表の下線は主キーを表す。
            商品            自社製品
           ┌──────┬────┐ ┌──────┬────┐
           │ 商品番号 │ 価格 │ │ 商品番号 │ 工場 │
           ┝━━━━━━┿━━━━┥ ┝━━━━━━┿━━━━┥
           │P1    │ 100│ │P1    │東京  │
           ├──────┼────┤ └──────┴────┘
           │P2    │ 300│
           ├──────┼────┤
           │P3    │ 200│
           └──────┴────┘
【SQL 文】
 SELECT 商品番号, 価格
  FROM 商品
  WHERE NOT EXISTS
   (SELECT *
    FROM 自社製品
    WHERE 商品.商品番号 = 自社製品.商品番号)
@ 0 A 1 B 2 C 3 D 4
B
SELECT * FROM 自社製品
          WHERE 商品.商品番号 = 自社製品,商品番号
          は、「“自社製品”のテーブルの中から、商品テーブルの商品番号と
          自社製品テーブルの商品番号が一致するレコードの、
          全部項目 (商品番号と工場) を取り出す。」というSQL文である。
これによって、
          P1 東京
が選択される。
          NOT EXISTS (  ) は、「( )内以外の条件で」
という意味であり、
          NOT EXISTS ( SELECT * FROM 自社製品
          WHERE 商品.商品番号 = 自社製品,商品番号 )
によって、
          P1 東京
          が除外される。
          SELECT 商品番号, 価格 FROM 商品 WHERE
          は、「商品テーブルから WHERE以下の条件に合うレコードの、
          商品番号と価格を取り出す。」ということであり、
          SELECT 商品番号, 価格 FROM 商品
           WHERE NOT EXISTS ( SELECT * FROM 自社製品
          WHERE 商品.商品番号 = 自社製品,商品番号 )
          によって、商品テーブルから、
          P1 
          を除外した結果残ったレコード、すなわち、
          P2 300
          P3 200
          を取り出すことになる。
| W−25 | 目次 | W−27 |