Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

ORDER BY

取得した結果を指定した列の値で並び替える句です。昇順・降順の指定や複数列によるソートが可能です。

構文
-- 指定した列で昇順に並び替えます(ASCはデフォルトのため省略可能)。
SELECT 列名 FROM テーブル名 ORDER BY 列名 ASC;

-- 指定した列で降順に並び替えます。
SELECT 列名 FROM テーブル名 ORDER BY 列名 DESC;

-- 複数列で並び替えます(列1が同じ値の場合は列2で並び替えます)。
SELECT 列名 FROM テーブル名 ORDER BY 列名1 ASC, 列名2 DESC;
構文一覧
構文概要
ORDER BY 列名指定した列を基準に並び替えます。デフォルトは昇順(ASC)です。
ASC昇順(小→大、あ→ん、日付の古い順)で並び替えます。省略した場合の既定値です。
DESC降順(大→小、ん→あ、日付の新しい順)で並び替えます。
ORDER BY 列1, 列2複数列を指定した場合、列1が同じ値の行を列2でさらに並び替えます。
NULLS FIRSTNULL値を先頭に配置します(PostgreSQLなどで対応)。
NULLS LASTNULL値を末尾に配置します(PostgreSQLなどで対応)。
サンプルコード
-- 社員を給与の昇順に並び替えます。
SELECT name, salary FROM employees ORDER BY salary ASC;

-- 社員を給与の降順に並び替えます(高い順)。
SELECT name, salary FROM employees ORDER BY salary DESC;

-- 部署名の昇順に並び替え、同じ部署内は給与の降順にします。
SELECT name, department, salary
FROM employees
ORDER BY department ASC, salary DESC;

-- 入社日が新しい順に上位5件を取得します。
SELECT name, hire_date FROM employees ORDER BY hire_date DESC LIMIT 5;

-- SELECT句の列番号(位置)で並び替えることもできます。
SELECT name, department, salary FROM employees ORDER BY 3 DESC;
実行結果
-- SELECT name, department, salary FROM employees ORDER BY department ASC, salary DESC; の結果例
-- +----------+----------+--------+
-- | name     | department | salary |
-- +----------+----------+--------+
-- | 山田次郎 | 営業部   | 320000 |
-- | 田中太郎 | 営業部   | 300000 |
-- | 鈴木花子 | 開発部   | 350000 |
-- | 佐藤美咲 | 開発部   | 280000 |
-- +----------+----------+--------+
データベース別の書き方

『ORDER BY』の基本構文(『ASC』・『DESC』・複数列指定)は主要なデータベースで共通して使用できます。

SELECT name, department, salary
FROM employees
ORDER BY department ASC, salary DESC;

NULLの並び順はデータベースによって異なります。PostgreSQL・Oracle では『NULLS FIRST』『NULLS LAST』で明示的に制御できます。

-- PostgreSQL・Oracle
SELECT name, salary FROM employees ORDER BY salary ASC NULLS LAST;

MySQL・SQL Server では『NULLS FIRST / LAST』に対応していません。MySQLでNULLを末尾にするには『ISNULL()』関数や『IS NULL』を応用します。

-- MySQL(NULLを末尾に配置)
SELECT name, salary FROM employees ORDER BY salary IS NULL ASC, salary ASC;

SQL Server では『CASE』式で同様の制御ができます。

-- SQL Server(NULLを末尾に配置)
SELECT name, salary FROM employees
ORDER BY CASE WHEN salary IS NULL THEN 1 ELSE 0 END, salary ASC;
概要

『ORDER BY』はSELECT文の末尾(WHERE・GROUP BY・HAVINGの後)に記述します。並び替えの基準となる列は複数指定でき、左から順に優先されます。

NULLを含む列を並び替えた場合、MySQLではNULLは最小値として扱われるため昇順で先頭、降順で末尾に配置されます。PostgreSQLでは『NULLS FIRST』・『NULLS LAST』で明示的に制御できます。

取得件数の制限と組み合わせる場合は『LIMIT / OFFSET』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。