平成23年度 技術士第一次試験問題【専門科目】
【16】情報工学部門
W−26
次のSQL文を実行した結果として得られる値はいくつか。なお、表の下線部は
主キーを示す。

SELECT 資格番号 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 資格番号 FROM 資格 WHERE
は、「資格テーブルから WHERE以下の条件に合うレコードから、
資格番号を取り出す。
」ということであり、

SELECT 資格番号 FROM 資格
 WHERE
 NOT EXISTS ( SELECT 資格番号 FROM 所属団体
  WHERE 在籍数 > 30 AND 資格.資格番号 = 所属団体.資格番号
)
によって、
資格テーブルの資格番号から、
AA200
CC700
AA100
AA200
除外した結果残った資格番号、すなわち、
BB800
CC500

取り出すことになる。

従って、
2行であるから、Aが正解である。


EXCELのマクロのご相談なら ファーストマクロ 



W−25 目次 W−27
ファーストマクロ TOPページ