SQL4 択難易度 標準

UNION した結果全体を名前順にしたい。正しいのは?

SELECT name FROM emp WHERE dept = 'dev' ORDER BY nameUNIONSELECT name FROM emp WHERE dept = 'hr';

正答

  1. SELECT name FROM emp WHERE dept='dev' UNION SELECT name FROM emp WHERE dept='hr' ORDER BY name;
  2. (SELECT name FROM emp WHERE dept='dev' ORDER BY name) UNION (SELECT name FROM emp WHERE dept='hr');
  3. SELECT name FROM emp WHERE dept='dev' UNION ORDER BY name SELECT name FROM emp WHERE dept='hr';
  4. SELECT name FROM emp WHERE dept='dev' ORDER BY name UNION SELECT name FROM emp WHERE dept='hr' ORDER BY name;

解説

UNION でつないだ文では、ORDER BY と LIMIT は最後の SELECT の後ろに 1 回だけ書き、合わせた結果全体を並べ替える。途中の SELECT に ORDER BY を書くと、SQLite は「ORDER BY は UNION の前ではなく後に置く」という構文エラーを返す。各 SELECT を括弧で囲む書き方は PostgreSQL や MySQL では通るが、SQLite の文法にはないため失敗する。UNION と次の SELECT の間に挟む形も誤り。

参考: www.sqlite.org

unionorder-by

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

SQLクイズへ