指摘・レビュー4 択難易度 標準

注文とその注文者を並べたい。このSQLへの指摘として正しいものは?

SELECT * FROM orders JOIN users;

正答

  1. JOIN は INNER JOIN と書かないと構文エラーになる
  2. テーブル名は単数形にしないと JOIN できない
  3. SELECT * のままでは JOIN の結果を取り出せない
  4. 結合条件(ON)が無いので、全組み合わせ(直積)が返る

解説

JOIN は ON で「どの行とどの行を対応させるか」を書かないと、orders の各行に users の全行がつながる直積になる。SQLite ではエラーにならず、行数が掛け算で増えるので気づきにくい。ON orders.user_id = users.id のような条件が要る。JOIN は INNER JOIN の省略形なので 1 番目は誤り。テーブル名の単複は好みの問題で動作に関係しない。

参考: www.sqlite.org

sqljoin

この問題を含む 指摘・レビュー のテストを制限時間つきで解く

指摘・レビュークイズへ