次のSQL文を実行した結果として得られる結果はいくつか。ここで、表の下線部は主キーを表す。
SELECT DISTINCT 担当者
FROM 発注書 AS AA
WHERE NOT EXISTS
(SELECT *
FROM 発注書 AS BB
WHERE AA.担当者 = BB.担当者
AND BB.単価 < 500);
“発注書”表
┌────┬────┬────┬────┐
│発注番号│ 担当者 │商品ID│ 単価 │
├────┼────┼────┼────┤
│ 1 │ 斎藤 │ 3 │ 500 │
├────┼────┼────┼────┤
│ 2 │ 斎藤 │ 2 │ 600 │
├────┼────┼────┼────┤
│ 3 │ 斎藤 │ 1 │ 500 │
├────┼────┼────┼────┤
│ 4 │ 山田 │ 2 │ 600 │
├────┼────┼────┼────┤
│ 5 │ 山田 │ 3 │ 400 │
├────┼────┼────┼────┤
│ 6 │ 鈴木 │ 3 │ 500 │
└────┴────┴────┴────┘
@ 1 A 2 B 3 C 4 D 5
A
DISTNCT は重複を削除するという意味の句である。
SQL文の意味は、以下のとおり。
SELECT DISTINCT 担当者
FROM 発注書 AS AA
WHERE NOT EXISTS
(SELECT * FROM 発注書 AS BB
WHERE AA.担当者 = BB.担当者
AND BB.単価 < 500);
発注書テーブルをAAとして読み替え、さらに
発注書テーブルをBBとして読み替え
AA表の担当者とBB表の担当者が同じで、BBの単価が500円のレコードを
BB表からすべて取り出す。
この段階で、発注番号 5番のレコードが取り出される。
さらに、上記のレコードに存在しないレコードを条件として
AA表から、担当者を重複なく取り出しなさい。
得られる結果は、
齊藤
鈴木
の2つである。
V−23 | 目次 | V−25 |