本文へスキップ

技術士試験(情報工学部門)・情報技術者試験。ファーストマクロ。


Since 2016.4.19

平成25年度 技術士第一次試験問題【専門科目】

V−28

次の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


類題

H23 W-26


正解

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