Computer365120 views
中学英語808712 views
雑学1472593 views
小学理科717236 views
高校倫理1433119 views
りんご192546 views
LaTeX957300 views
いろは2986023 views
中学数学621382 views
世界の国560595 views
Help
Tools

English

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