中学社会667376 views
いろは2991619 views
教育149021 views
英語608929 views
中学理科1627252 views
りんご195907 views
小学理科717678 views
雑学1472809 views
小学算数1196248 views
高校国語786065 views

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 より後ろです。