SQL練習室
← SQLガイド

SQLのORDER BYとは?昇順・降順と複数列を結果表で解説

ORDER BYは、検索結果の行を指定した順に並べる構文です。社員IDの小さい順や月給の高い順など、見たい順番を決められます。同じ5人の表で、並び方だけがどう変わるかを見てみましょう。

例で使う表

employeesの1行が社員1人分です。営業が2人、開発が2人、サポートが1人います。salaryは月給(円)で、恵比寿さんのNULLは月給が未入力であることを表し、0円とは区別します。すべての例でこの5人を使います。

employees:社員5人の一覧(salaryは月給・円)
id(社員ID)name(名前)department(部署)salary(月給)
1青木営業300000
2北野開発400000
3中央営業350000
4大和開発400000
5恵比寿サポートNULL

ORDER BYの基本構文

sql
SELECT id, name, salary
FROM employees
ORDER BY id ASC;

ASCで社員IDの小さい順に並べる

SELECTとFROMの後ろにORDER BY id ASCと書くと、社員IDが1、2、3、4、5の順に並びます。ASCは小さい値から大きい値への昇順です。並べ替えても社員の人数や月給は変わりません。

sql
SELECT id, name, salary
FROM employees
ORDER BY id ASC;
実行結果
idnamesalary
1青木300000
2北野400000
3中央350000
4大和400000
5恵比寿NULL

DESCで社員IDの大きい順に並べる

ASCをDESCに変えると、社員IDが5、4、3、2、1の順になります。DESCは大きい値から小さい値への降順です。最初の結果と、先頭・末尾の社員を見比べてください。

sql
SELECT id, name, salary
FROM employees
ORDER BY id DESC;
実行結果
idnamesalary
5恵比寿NULL
4大和400000
3中央350000
2北野400000
1青木300000

複数列で同じ月給の人の順番を決める

月給の低い順にし、同額なら社員IDの小さい順にします。先にsalaryを比べ、月給400000円の北野さんと大和さんだけはidで順番を決めます。PostgreSQLでは昇順のNULLは既定で末尾なので、未入力の恵比寿さんが最後です。

sql
SELECT id, name, salary
FROM employees
ORDER BY salary ASC, id ASC;
実行結果
idnamesalary
1青木300000
3中央350000
2北野400000
4大和400000
5恵比寿NULL

NULLS LASTで未入力を末尾に置く

月給の高い順でも未入力の人を最後にしたい場合は、salary DESC NULLS LASTと書きます。PostgreSQLではDESCだけだとNULLが先頭になるため、この指定が必要です。ここでも同額ならidの小さい順にしています。

sql
SELECT id, name, salary
FROM employees
ORDER BY salary DESC NULLS LAST, id ASC;
実行結果
idnamesalary
2北野400000
4大和400000
3中央350000
1青木300000
5恵比寿NULL

LIMITで月給の上位2人を取り出す

前のSQLの末尾にLIMIT 2を足すと、並べた結果の先頭2行だけを取り出せます。この表では北野さんと大和さんです。同額でもidで順番を決めてあるので、上位の行を選ぶ基準が明確です。

sql
SELECT id, name, salary
FROM employees
ORDER BY salary DESC NULLS LAST, id ASC
LIMIT 2;
実行結果
idnamesalary
2北野400000
4大和400000

実際に1問解いてみる

ASC

staff_directoryを、氏名の昇順で取得してください。

テーブル

読み込み中…

実行結果

関連構文

ORDER BYについてよくある質問

ORDER BYを書かなくても社員ID順になりますか?
保証されません。今回の元の表がID順に見えていても、検索結果をその順にしたいときはORDER BY idを指定します。
NULLを先頭に置きたい場合は?
NULLS FIRSTを指定します。NULLS FIRSTとNULLS LASTは、ASC・DESCのどちらとでも組み合わせられます。

参考文献

内容はPostgreSQL公式ドキュメントを参照し、初めて学ぶ人向けに日本語で整理しています。