SQLのORDER BYとは?昇順・降順と並べ替えを解説
SQLのORDER BY句は、SELECT文の検索結果を指定した順序に並べ替えるために使います。昇順・降順、同じ値があるときの優先順位、NULLの位置まで指定できます。ORDER BYがない検索結果の行順は保証されないため、表示順が必要なら明示しましょう。
ORDER BYの基本構文
sql
SELECT columns
FROM table_name
ORDER BY sort_column [ASC | DESC];ASCとDESCで昇順・降順を指定する
ORDER BY column ASCは小さい値から大きい値への昇順、DESCは大きい値から小さい値への降順です。ASCは既定値なので省略できますが、読み手へ意図を伝えたい場合は明記してもかまいません。文字列や日付もデータ型に応じた順序で並びます。
sql
SELECT name, hired_at
FROM employees
ORDER BY hired_at DESC;ORDER BYで複数列を並べ替える
並べ替える列はカンマ区切りで複数指定できます。先頭の列が同じ行だけを次の列で比較します。結果を毎回同じ順序にしたい場合は、最後に主キーなど一意な列を追加すると安定します。
sql
SELECT id, department, salary, name
FROM employees
ORDER BY
department ASC,
salary DESC,
id ASC;NULLS FIRST・NULLS LASTでNULLの位置を決める
PostgreSQLではNULLS FIRSTまたはNULLS LASTを使い、NULLを先頭と末尾のどちらへ置くか指定できます。既定ではNULLは非NULL値より大きいものとして扱われ、ASCでは末尾、DESCでは先頭に置かれます。表示要件がある場合は明示すると安全です。
sql
SELECT name, manager_id
FROM employees
ORDER BY manager_id ASC NULLS LAST;ORDER BYとLIMITを組み合わせる
ORDER BYで並べた後にLIMITで件数を絞ると、上位N件や最新N件を取得できます。LIMITだけではどの行が選ばれるか安定しないため、意味のある結果を得るにはORDER BYと組み合わせます。同順位でも結果を固定したい場合は一意な列まで指定します。
sql
SELECT id, name, salary
FROM employees
ORDER BY salary DESC, id ASC
LIMIT 5;実際に1問解いてみる
ASC
staff_directoryを、氏名の昇順で取得してください。
⌘ / Ctrl + Enter
テーブル
読み込み中…
実行結果
関連構文
ORDER BYについてよくある質問
- ORDER BYの既定は昇順ですか?
- はい。ASCもDESCも省略した場合、PostgreSQLではASCとして扱われます。明示的に降順へ並べる場合はDESCを指定します。
- SELECTにない列でもORDER BYに指定できますか?
- 通常のSELECTでは指定できます。ただしSELECT DISTINCTを使う場合など、ORDER BYの式がSELECTリストに必要になる制約があります。
参考文献
内容はPostgreSQL公式ドキュメントを参照し、初めて学ぶ人向けに日本語で整理しています。
- PostgreSQL公式:行の並べ替え(ORDER BY) — ASC・DESC、複数列、NULLの並び順の仕様
- PostgreSQL公式:照合順序のサポート — 文字列の並べ替えと照合順序の仕様
- PostgreSQL公式:LIMITとOFFSET — ORDER BYとLIMITを組み合わせる際の注意点