次のSQL文を実行した結果として得られる表の行数はいくつか。なお、表の下線部は主キーを示す。
SELECT 資格番号 FROM 資格
WHERE NOT EXISTS ( SELECT 資格番号 FROM 所属団体
WHERE 在籍数 > 30 AND 資格.資格番号 = 所属団体.資格番号 )
“資格” 表
┌────┬────────┐
│資格番号│資格名 │
├────┼────────┤
│AA100 │技術士 │
├────┼────────┤
│AA200 │中小企業診断士 │
├────┼────────┤
│BB800 │税理士 │
├────┼────────┤
│CC500 │公認会計士 │
├────┼────────┤
│CC700 │ITコーディネータ│
└────┴────────┘
“所属団体” 表
┌─────┬────┬───┐
│団体コード│資格番号│在籍数│
├─────┼────┼───┤
│010 │AA100 │ 20 │
├─────┼────┼───┤
│010 │AA200 │ 200 │
├─────┼────┼───┤
│010 │CC700 │ 130 │
├─────┼────┼───┤
│020 │AA100 │ 150 │
├─────┼────┼───┤
│020 │CC500 │ 30 │
├─────┼────┼───┤
│030 │CC500 │ 20 │
├─────┼────┼───┤
│030 │CC700 │ 10 │
├─────┼────┼───┤
│040 │AA200 │ 40 │
└─────┴────┴───┘
@ 1 A 2 B 3 C 4 D 5
A
SELECT 資格番号 FROM 所属団体
WHERE 在籍数 > 30 AND 資格.資格番号 = 所属団体.資格番号は、「“所属団体”のテーブルの中から、在籍数が30より大きく、かつ、資格表の資格番号と所属団体の資格番号が一致するレコードから、資格番号を取り出す。」というSQL文である。
これによって、
AA200
CC700
AA100
AA200
が選択される。
NOT EXISTS ( ) は、「( ) 内以外の条件で」
という意味であり、
NOT EXISTS ( SELECT 資格番号 FROM 所属団体
WHERE 在籍数 > 30 AND 資格.資格番号 = 所属団体.資格番号 )
によって、
AA200
CC700
AA100
AA200
が除外される。
SELECT 資格番号 FROM 資格 WHEREは、「資格テーブルから WHERE以下の条件に合うレコードから、資格番号を取り出す。」ということであり、
SELECT 資格番号 FROM 資格
WHERE NOT EXISTS ( SELECT 資格番号 FROM 所属団体
WHERE 在籍数 > 30 AND 資格.資格番号 = 所属団体.資格番号 )
によって、資格テーブルの資格番号から、
AA200
CC700
AA100
AA200
を除外した結果残った資格番号、すなわち、
BB800
CC500
を取り出すことになる。
従って、2行であるから、Aが正解である。
W−25 | 目次 | W−27 |