本文へスキップ

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


Since 2016.4.19

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

V−24

次のSQL文を実行した結果として得られる結果はいくつか。ここで、表の下線部は主キーを表す。

 SELECT DISTINCT 担当者
   FROM 発注書 AS AA
  WHERE NOT EXISTS
   (SELECT *
     FROM 発注書 AS BB
    WHERE AA.担当者 = BB.担当者
       AND BB.単価 < 500);

 “発注書”表
 ┌────┬────┬────┬────┐
 │発注番号│ 担当者 │商品ID│ 単価 │
 ├────┼────┼────┼────┤
 │  1  │ 斎藤 │  3  │ 500 │
 ├────┼────┼────┼────┤
 │  2  │ 斎藤 │  2  │ 600 │
 ├────┼────┼────┼────┤
 │  3  │ 斎藤 │  1  │ 500 │
 ├────┼────┼────┼────┤
 │  4  │ 山田 │  2  │ 600 │
 ├────┼────┼────┼────┤
 │  5  │ 山田 │  3  │ 400 │
 ├────┼────┼────┼────┤
 │  6  │ 鈴木 │  3  │ 500 │
 └────┴────┴────┴────┘

@ 1  A 2  B 3  C 4  D 5


正解

A


解説

DISTNCT は重複を削除するという意味の句である。

SQL文の意味は、以下のとおり。
SELECT DISTINCT 担当者
   FROM 発注書 AS AA
  WHERE NOT EXISTS
    (SELECT * FROM 発注書 AS BB
     WHERE AA.担当者 = BB.担当者
       AND BB.単価 < 500
);

発注書テーブルをAAとして読み替え、さらに
発注書テーブルをBBとして読み替え
AA表の担当者とBB表の担当者が同じで、BBの単価が500円のレコードを

BB表からすべて取り出す。

この段階で、発注番号 5番のレコードが取り出される。

さらに、上記のレコードに存在しないレコードを条件として
AA表から、担当者を重複なく取り出しなさい。

得られる結果は、
齊藤
鈴木

2つである。

V−23 目次 V−25