平成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  となり、選択されるレコードはない。

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



問28 目次 問30
ファーストマクロ TOPページ