"サッカーチーム"表と"審判"表から、条件を満たす対戦を導出するSQL文のaに入れる字句はどれか。 〔条件〕 ・出場チーム1のチーム名は出場チーム2のチーム名よりもアルファベット順で先にくる。 ・審判は、所属チームの対戦を担当することはできない。 〔SQL文〕 SELECT A.チーム名 AS 出場チーム1, B.チーム名 AS 出場チーム2, C.氏名 AS 審判氏名 FROM サッカーチーム AS A, サッカーチーム AS B, 審判 AS C WHERE A.チーム名 < B.チーム名 AND [ a ]
複数値との不一致はNOT INで表す
応用情報技術者試験/2016年度 秋期 午前 問29/データベース / SQL
サッカーチーム表:
チーム名
X
Y
Z
審判表:
氏名
所属チーム名
佐藤健太
X
鈴木翔太
Y
高橋拓也
Z
対戦(導出結果イメージ):
出場チーム1
出場チーム2
審判氏名
X
Y
高橋拓也
X
Z
鈴木翔太
Y
Z
佐藤健太
選択肢
ア(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.所属チーム名)
正解と解説
正解:イ C.所属チーム名 NOT IN (A.チーム名, B.チーム名)
審判は自分の所属チームが出場する対戦を担当できないので、審判の所属チーム名が出場チーム1と出場チーム2のどちらとも一致しないという条件が必要です。これは所属チーム名が2つのチーム名の集合に含まれないこと、すなわち NOT IN で簡潔に表せます。OR で結ぶと片方さえ違えば真になってしまい、自分のチームの対戦を担当する行が残ってしまいます。