UNION した結果全体を名前順にしたい。正しいのは?
SELECT name FROM emp WHERE dept = 'dev' ORDER BY nameUNIONSELECT name FROM emp WHERE dept = 'hr';正答
- SELECT name FROM emp WHERE dept='dev' UNION SELECT name FROM emp WHERE dept='hr' ORDER BY name;
- (SELECT name FROM emp WHERE dept='dev' ORDER BY name) UNION (SELECT name FROM emp WHERE dept='hr');
- SELECT name FROM emp WHERE dept='dev' UNION ORDER BY name SELECT name FROM emp WHERE dept='hr';
- 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
この問題を含む SQL のテストを制限時間つきで解く
SQLクイズへ