次の SQL の結果は?(注文の user_id は 1, 1, 3)
SELECT name FROM usersWHERE id IN (SELECT user_id FROM orders) ORDER BY name;正答
- ann, ann, cat
- bob
- ann, cat
- ann, bob, cat
解説
IN (サブクエリ) は、外側の行の id がサブクエリの結果に含まれるかを判定する条件なので、注文が 2 件ある ann も 1 行のまま返る。選択肢 1 のように行が重複するのは JOIN で結合したときの挙動で、IN では起きない。bob(id 2)は注文が無いので含まれず、選択肢 2 の bob だけが返るのは NOT IN にしたときの結果である。
参考: www.sqlite.org
この問題を含む SQL のテストを制限時間つきで解く
SQLクイズへ