応用情報技術者試験 応用情報技術者試験 平成28年度秋期 午前29: “サッカーチーム”表と“審判”表から,条件を満たす対戦を導出するSQL文のaに入れる字句はどれか。 〔条件〕 ・出場チーム1のチーム名は出場チーム2のチーム名よ

応用情報技術者試験 平成28年度秋期 午前
Q 2929 / 80
“サッカーチーム”表と“審判”表から,条件を満たす対戦を導出するSQL文のaに入れる字句はどれか。 〔条件〕 ・出場チーム1のチーム名は出場チーム2のチーム名よりもアルファベット順で先にくる。 ・審判は,所属チームの対戦を担当することはできない。 サッカーチーム
チーム名
X
Y
Z
審判
氏名所属チーム名
佐藤健太X
鈴木翔太Y
高橋拓也Z
対戦
出場チーム1出場チーム2審判氏名
XY高橋拓也
XZ鈴木翔太
YZ佐藤健太
〔SQL文〕 SELECT A.チーム名 AS 出場チーム1, B.チーム名 AS 出場チーム2, C.氏名 AS 審判氏名 FROM サッカーチーム AS A, サッカーチーム AS B, 審判 AS C WHERE A.チーム名 < B.チーム名 AND a
この問の正解率:41.04%(921件)

問題本文

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

選択肢

  • .(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.チーム名)

解説

自己結合と除外条件のSQLを組み立てる問題。サッカーチーム表を A・B として自己結合し、A.チーム名 < B.チーム名 で「出場チーム1がアルファベット順で先」かつ重複・逆順ペアを除去している。残る条件は「審判の所属チームが、対戦する2チーム(A・B)のどちらでもない」こと。これは審判Cの所属チームが A.チーム名 でも B.チーム名 でもない、すなわち C.所属チーム名 が {A.チーム名, B.チーム名} のいずれにも一致しないことを意味する。これを最も簡潔に表すのが NOT IN(A.チーム名, B.チーム名) であり、正解はイである。

選択肢ごとの解説

  • .「A.チーム名 < C.所属チーム名 OR B.チーム名 < C.所属チーム名」は OR で結ぶため、どちらか一方と異なれば真になってしまう。審判の所属が一方のチームと一致していても他方と異なれば条件を満たしてしまい、「両方と異なる」を表現できず誤り。正しくは AND または NOT IN。
  • .「C.所属チーム名 NOT IN(A.チーム名, B.チーム名)」は、審判の所属チームが対戦2チームのどちらにも含まれないことを正確に表し、条件「所属チームの対戦は担当できない」を満たすため正しい。
  • .EXISTS(…WHERE A<D.所属 AND B<D.所属)は、対戦2チームのどちらにも所属しない審判が審判表に1人でも「存在すれば」真になる。これは担当審判C自身が両チームと無関係であることを保証せず、別の無関係な審判がいるだけで成立してしまうため誤り。
  • .NOT EXISTS(…WHERE A=D.所属 OR B=D.所属)は、対戦2チームのいずれかに所属する審判が「1人も存在しない」場合に真となる。実際には各チームに審判が所属するため常に偽になり、1件も導出できず誤り。担当審判C自身の所属を判定していない点が問題。

応用情報技術者試験 平成28年度秋期 午前過去問一覧へ戻る・問29

応用情報技術者試験 平成28年度秋期 午前 問29:“サッカーチーム”表と“審判”表から,条件を満たす対戦を導出するSQL文のaに入れる字句はどれか。 〔条件〕 ・出場チーム1のチーム名は出場チーム2のチーム名よりもアルファベット順 | 合格.dev