本文へスキップ

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


Since 2016.4.19

平成28年度 秋期 応用情報技術者試験問題と解説

問29

“サッカーチーム”表と“審判”表から、条件を満たす対戦を導出するSQL文の a に入れる字句はどれか。

〔条件〕

・出場チーム1のチーム名は出場チーム2のチーム名よりもアルファベット順で先にくる。

・審判は、所属チームの対戦を担当することはできない。

  サッカーチーム    審判
 ┌────────┐ ┌────┬──────┐
 │  チーム名  │ │ 氏名 │所属チーム名│
 ┝━━━━━━━━┥ ┝━━━━┿━━━━━━┥
 │    X    │ │佐藤健太│   X   │
 ├────────┤ ├────┼──────┤
 │    Y    │ │鈴木翔太│   Y   │
 ├────────┤ ├────┼──────┤
 │    Z    │ │高橋拓也│   Z   │
 └────────┘ └────┴──────┘

  対戦 出場チーム1 出場チーム2 審判氏名 
     X      Y   高橋拓也
     X      Z   鈴木翔太
     Y      Z   佐藤健太


〔SQL文〕
SELECT A.チーム名 AS 出場チーム1, B.チーム名 AS 出場チーム2,
 C.氏名 AS 審判氏名
 FROM サッカーチーム AS A, サッカーチーム AS B, 審判 AS C
 WHERE A.チーム名 < B.チーム名 AND   a  

ア (A.チーム名 <> C.所属チーム名 OR B.チーム名 <> C.所属チーム名)

イ C.所属チーム名 NOT IN (A.チーム名, B.チーム名)

ウ EXISTS
 (SELECT * FROM 審判 AS D WHERE A.チーム名 <> D.所属チーム名
  AND B.チーム名 <> D.所属チーム名)

エ NOT EXISTS
 (SELECT * FROM 審判 AS D WHERE A.チーム名 = D.所属チーム名
  OR B.チーム名 = D.所属チーム名)


正解


解説

  a   には導出の条件が入る。

ア そもそものロジックがおかしく、例えばチームXとチームYが対戦し、審判所属チームがXの場合、
 A.チーム名(X) <> C.所属チーム名(X) 
 B.チーム名(Y) <> C.所属チーム名(X) 
によって、条件に合致し、レコードとして選択されることになる。

イ 正しい。A.チーム名, B.チーム名 に合致しないチームが選択される。

ウ EXISTS
  (SELECT * FROM 審判 AS D WHERE A.チーム名 <> D.所属チーム名
   AND B.チーム名 <> D.所属チーム名)

によって、チームZが導出される。
しかし、EXIST句は、結果行が存在すればを返すため、
 A.チーム名 < B.チーム名 AND となり、すべてのレコードが導出される。

エ A.チーム名がX、B.チーム名がYの時、
 NOT EXISTS
  (SELECT * FROM 審判 AS D WHERE A.チーム名 = D.所属チーム名
  OR B.チーム名 = D.所属チーム名)

によって、チームXとチームYの審判の2行が導出される。
しかし、NOT EXIST句は結果行が存在すればを返すため、
A.チーム名 < B.チーム名 AND となり、選択されるレコードはない。

問28 目次 問30