“サッカーチーム”表と“審判”表から、条件を満たす対戦を導出する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 |