本文へスキップ

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


Since 2016.4.19

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

W−26

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


類題

H25 V-28


正解

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