ORDER BY で並び替える
SELECT 文で取得したデータを並び替えるには ORDER BY を使います。
基本構文
SELECT カラム名 FROM テーブル名 ORDER BY カラム名;たとえば users テーブルを age の順で並び替えるには、こう書きます。
SELECT * FROM users ORDER BY age;デフォルトでは昇順(小さい順)になります。
昇順と降順
昇順を明示するには ASC、降順にするには DESC を指定します。
-- 昇順(小さい順)
SELECT * FROM users ORDER BY age ASC;
-- 降順(大きい順)
SELECT * FROM users ORDER BY age DESC;ASC(昇順)
1, 2, 3… または A, B, C… の順
DESC(降順)
3, 2, 1… または C, B, A… の順
複数のカラムで並び替える
カンマで区切ると、複数のカラムを基準にできます。
SELECT * FROM users ORDER BY city, age;この場合、まず city で並び替え、同じ city の中では age で並び替えます。それぞれに ASC や DESC を指定することもできます。
SELECT * FROM users ORDER BY city ASC, age DESC;文字列の並び替え
文字列カラムで ORDER BY を使うと、文字コード順に並びます。日本語の場合、照合順序(COLLATION)によって結果が変わることがあります。
SELECT * FROM users ORDER BY name;「あいうえお順」にしたい場合は、テーブルやカラムの照合順序を適切に設定しておく必要があります。
NULL の扱い
ORDER BY で NULL を含むカラムを指定すると、MySQL では NULL が先頭に来ます(昇順の場合)。
SELECT * FROM users ORDER BY email;NULL を最後に持っていきたい場合は、少し工夫が必要です。
SELECT * FROM users ORDER BY email IS NULL, email;email IS NULL は NULL なら 1、そうでなければ 0 を返すので、NULL が後ろに回ります。
WHERE と組み合わせる
WHERE で絞り込んだ結果を並び替えることもできます。
SELECT * FROM users
WHERE age >= 20
ORDER BY age DESC;ORDER BY は SELECT 文の最後のほうに書きます。WHERE より後ろです。











