この概念が出た関連問題

この試験の対策ガイド

基本情報技術者試験 対策ガイド

合格率・勉強法・参考書の選び方をまとめています

見る →
答えと解説を見る(先に解くのがおすすめ)

正解は ウ

解説

SQLのIN句は「○ OR ○ OR ○」と等価です。WHERE 仕入先ID IN ('M002', 'M004') は「仕入先IDがM002またはM004の行」を選択します。これはWHERE 仕入先ID = 'M002' OR 仕入先ID = 'M004' と完全に同じ結果を返します。INはORの短縮表記と覚えておくと試験で迷わずに済みます。ANDは両条件が同時に成立する行を選ぶため、1行が同時にM002かつM004になることはなく結果が0件になります。BETWEENは範囲指定であり、M002とM004の間にM003が含まれてしまいます(文字列比較)。INTERSECTは和ではなく積(共通部分)を求めるため、両サブクエリの共通行のみを返します。

なぜ他の選択肢は違うのか

選択肢 ア
「WHERE 仕入先ID = 'M002' AND 仕入先ID = 'M004'」は一つの行の仕入先IDが同時にM002かつM004になることは不可能なため、常に0件になります。IN句はORに相当し、ANDではありません。IN → OR という対応関係を確実に覚えましょう。
選択肢 イ
「SELECT WHERE 仕入先ID = 'M002' INTERSECT SELECT WHERE 仕入先ID = 'M004'」のINTERSECTは共通行(積集合)を返します。仕入先IDがM002の商品集合とM004の商品集合に共通の商品は存在しないため、結果は0件になります。INTERSECTはUNION(和集合)と混同しないようにしましょう。
選択肢 エ
「WHERE 仕入先ID BETWEEN 'M002' AND 'M004'」はBETWEENが両端を含む範囲指定のため、M002・M003・M004の3つの仕入先IDが対象になります。M003も含まれてしまうため、INの結果とは異なります。

解くときのポイント

SQL: IN(リスト列挙)≡ OR(複数のOR条件)。IN ('A','B') = WHERE col='A' OR col='B'。ANDは積(同時成立)、BETWEENは連続範囲、INTERSECTは積集合。「IN=OR」を公式として覚えましょう。