応用情報技術者 2016年 秋期 午前2 問29
問題文
“サッカーチーム” 表と “審判”表から、条件を満たす対戦を導出する SQL文のaに入れる字句はどれか。
〔条件〕
・出場チーム1のチーム名は出場チーム 2のチーム名よりもアルファベット順で先にくる。
・審判は、所属チームの対戦を担当することはできない。

選択肢
ア:
(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.所属チーム名)
サッカーチームと審判の対戦条件を満たすSQL文【午前2 解説】
要点まとめ
- 結論:審判の所属チームが出場チーム1・2のどちらにも含まれない条件は
NOT IN
句で簡潔に表現できる。 - 根拠:
NOT IN
は指定した複数の値のいずれにも該当しないことを判定し、複数条件のAND結合よりも明確で誤解が少ない。 - 差がつくポイント:複雑なサブクエリや論理演算子の誤用を避け、SQLの集合演算の理解と適切な句の選択が重要。
正解の理由
選択肢イの
これにより「審判は自分の所属チームの対戦を担当できない」という条件をシンプルかつ明確に実装できるため、正解です。
C.所属チーム名 NOT IN (A.チーム名、B.チーム名)は、審判の所属チームが出場チーム1または出場チーム2のいずれにも該当しないことを正確に表現しています。
これにより「審判は自分の所属チームの対戦を担当できない」という条件をシンプルかつ明確に実装できるため、正解です。
よくある誤解
- OR条件で所属チーム名が異なることを表現すると、どちらか一方だけ異なればよいと誤解しがちです。
- EXISTSやNOT EXISTSを使うと複雑になり、条件の意味を取り違えることがあります。
解法ステップ
- 出場チーム1と出場チーム2のチーム名をアルファベット順で比較し、
A.チーム名 < B.チーム名
とする。 - 審判の所属チーム名が出場チーム1および2のどちらにも含まれない条件を考える。
- 複数の値に対して所属チーム名が含まれないことを表す
NOT IN
句を使う。 - SQL文のWHERE句に
AND C.所属チーム名 NOT IN (A.チーム名、B.チーム名)
を追加する。 - これにより、審判が自分の所属チームの試合を担当しない条件が満たされる。
選択肢別の誤答解説
- ア:
(A.チーム名 <> C.所属チーム名 OR B.チーム名 <> C.所属チーム名)
→ OR条件はどちらか一方が異なればよいので、審判が所属チームの試合を担当する可能性を排除できない。 - イ:
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.所属チーム名)
→ 審判テーブルに該当する行が存在しないことを判定し、元の審判テーブルの行単位の条件としては不適切。
補足コラム
SQLの
また、
SQLの集合演算や論理演算の理解は、効率的で誤りの少ないクエリ作成に不可欠です。
NOT IN句は複数の値に対して否定条件を簡潔に書けるため、複雑な論理演算子やサブクエリを使わずに済みます。
また、
EXISTSや
NOT EXISTSはサブクエリの存在有無を判定するためのもので、今回のように単純な比較条件には過剰な表現となります。
SQLの集合演算や論理演算の理解は、効率的で誤りの少ないクエリ作成に不可欠です。
FAQ
Q:
A:
NOT INと
<>の違いは何ですか?
A:
<>は単一の値との比較で、複数値の否定条件には
NOT INを使うのが適切です。
Q: なぜ
A:
OR条件は誤りになるのですか?
A:
ORはどちらか一方が真なら全体が真になるため、審判が所属チームの試合を担当する可能性を排除できません。
Q:
A: サブクエリの結果の存在有無を判定したい場合に使い、単純な値比較には不向きです。
EXISTSと
NOT EXISTSはどんな時に使うべきですか?
A: サブクエリの結果の存在有無を判定したい場合に使い、単純な値比較には不向きです。
関連キーワード: SQL, NOT IN, EXISTS, 論理演算子、サブクエリ、チーム対戦条件、審判担当制限

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

