MySQL の ORDER BY

ここでは MySQL の ORDER BY についてご説明します。

サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。

MySQL の ORDER BY で結果セットを並べ替える

MySQL で結果セットのレコードの順番を並べ替えたい時には ORDER BY を使って並べ替えることができます。

SELECT 文で ORDER BY カラム名 のように指定すると、そのカラム名の値で結果セットのレコードが並べ替えられます。


例えば、次のような students テーブルがあります。

MySQL の ORDER BY 1


この students テーブルのレコードを、first_name のアルフベット順に並べ替えて取得するには次のようにします。

SELECT 	* 
FROM 	students
ORDER BY first_name;

[実行結果]

MySQL の ORDER BY 2

students テーブルのレコードが first_name のアルフベット順にソートされて、取得できていますね。


ORDER BY で結果セットを降順に並べ替える

ORDER BY カラム名 と指定すると、デフォルトでは結果セットがカラムの値の昇順でソートされます。

カラムの値の降順で並べ替えたい時には ORDER BY カラム名 DESC のように、カラム名に続けて DESC を指定します。


例えば、students テーブルのレコードを、誕生日の遅い人から順番に並べ替えたい場合は、次のようにできます。

SELECT 	* 
FROM 	students
ORDER BY birthday DESC;

[実行結果]

MySQL の ORDER BY 3

students テーブルのレコードが birthday の降順でソートされていますね。


複数カラムでの並べ替えと、ENUM カラムのソート順について

ここまで、ひとつのカラムを指定して、結果セットを並べ替えしてきましたが、複数のカラム名を指定して並べ替えることも可能です。

その場合は ORDER BY カラム名1, カラム名2, カラム名3, ... のようにカラムをカンマで区切って続けます。

このように指定すると、結果セットがまずは カラム名1 の昇順、次にカラム名2 の昇順、、、のようにレコードが並べ替えされます。

降順にしたい場合は、降順にしたいカラム名の直後に DESC をつけます。


例えば、students テーブルのレコードを、性別 (M or F) を降順で並べた後に、first_name で並べ替えたい場合は、次のようにできます。

SELECT 	* 
FROM 	students
ORDER BY gender DESC,
		 first_name;

[実行結果]

MySQL の ORDER BY 4

students テーブルのレコードが、まず gender でソートされ、次に first_name でソートされています。


ここで、注意したいのは、gender がアルファベット順の降順になっていないところです。

これは gender のデータ型が ENUM ('M','F') だからで、ENUM のカラムは定義したインデックス順が昇順となります。

ですので、昇順が M, F / 降順が F, M になるため、F が先にきています。

ENUM のカラムを定義する際に ENUM ('F','M') のようにアルファベット順で指定しておくか、ORDER BY で CHAR にキャストすることで、ENUM カラムの値もアルファベット順にならべることができます。


以上、MySQL の ORDER BY についてご説明しました。

© 2024 MySQL 入門