次のSQL文を実行した結果として得られる値はいくつか。なお、表の下線部は主キーを示す。
SELECT COUNT (資格番号) FROM 資格
WHERE NOT EXISTS ( SELECT 資格番号 FROM 所属団体
WHERE 在籍数 > 30
AND 資格.資格番号 = 所属団体.資格番号 )
“資格” 表
┌────┬───────┐
│資格番号│資格名 │
├────┼───────┤
│AA100 │技術士 │
├────┼───────┤
│AA200 │中小企業診断士│
├────┼───────┤
│BB800 │税理士 │
├────┼───────┤
│CC500 │公認会計士 │
├────┼───────┤
│CC700 │弁護士 │
└────┴───────┘
“所属団体” 表
┌─────┬────┬───┐
│団体コード│資格番号│在籍数│
├─────┼────┼───┤
│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 COUNT (資格番号) FROM 資格 WHEREは、「資格テーブルから WHERE以下の条件に合うレコードを取り出して、資格番号の数を数える。」ということであり、
SELECT COUNT (資格番号) FROM 資格
WHERE NOT EXISTS ( SELECT 資格番号 FROM 所属団体
WHERE 在籍数 > 30 AND 資格.資格番号 = 所属団体.資格番号 )
によって、資格テーブルの資格番号から、
AA200
CC700
AA100
AA200
を除外した結果残った資格番号、すなわち、
BB800
CC500
の資格番号の数を数えることになる。
従って、2つであるから、Aが正解である。
V−27 | 目次 | V−29 |