“サッカーチーム”表と“審判”表から、条件を満たす対戦を導出する
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.チーム名 に合致しないチームが選択される。
ウ A.チーム名がX、B.チーム名がYの時、
EXISTS
(SELECT * FROM 審判 AS D WHERE A.チーム名 <> D.所属チーム名
AND B.チーム名 <> D.所属チーム名)によって、チームZが選択される。
しかし、チームX < チームY AND チームZ となり、
レコードとして選択さない。
エ A.チーム名がX、B.チーム名がYの時、
NOT EXISTS
(SELECT * FROM 審判 AS D WHERE A.チーム名 = D.所属チーム名
OR B.チーム名 = D.所属チーム名) によって、チームX、チームY 以外、
すなわち、チームZが選択される。
しかし、チームX < チームY AND チームZ となり、
レコードとして選択さない。
EXCEL VBAのご相談なら ファーストマクロ へ
タグ:SQL