SQL4 択難易度 基礎

emp と dept を結合し、給与 300 以上だけを出したい。正しいのは?

SELECT e.name, d.label FROM emp eWHERE e.salary >= 300JOIN dept d ON e.dept = d.idORDER BY e.name;

正答

  1. SELECT e.name, d.label FROM emp e JOIN dept d WHERE e.salary >= 300 ON e.dept = d.id ORDER BY e.name;
  2. SELECT e.name, d.label FROM emp e JOIN dept d ON e.dept = d.id WHERE e.salary >= 300 ORDER BY e.name;
  3. SELECT e.name, d.label FROM emp e JOIN dept d ON e.dept = d.id ORDER BY e.name WHERE e.salary >= 300;
  4. SELECT e.name, d.label JOIN dept d ON e.dept = d.id FROM emp e WHERE e.salary >= 300 ORDER BY e.name;

解説

JOIN ... ON は FROM 句の一部で、「どの表をどう結合するか」を表す。そのため FROM 表 JOIN 表 ON 条件 と続けて書き、行を絞る WHERE はその後ろに置く。WHERE を JOIN より前に書くと FROM 句が途中で終わってしまい構文エラーになる。ON は直前の JOIN に付く句なので、間に WHERE を挟むこともできない。JOIN を FROM より前に書く形も誤り。

参考: www.sqlite.org

joinwhereclause-order

この問題を含む SQL のテストを制限時間つきで解く

SQLクイズへ