MySQLで複数カラムのORDER BYを使う方法を完全解説|初心者でもわかるSQL並び替え入門
生徒
「MySQLで並び替えはできるようになったんですけど、同じ年齢の人がいると順番がよく分からなくて…」
先生
「それはORDER BYを1つだけ使っているからですね。複数の列を使って並び替えることもできますよ。」
生徒
「えっ、並び替えって1つの項目だけじゃないんですか?」
先生
「名簿を年齢順にして、さらに名前順に並べるイメージです。紙の名簿と同じ感覚で考えましょう。」
1. SQLとは何か?
SQLは、データベースという「大量の情報を整理して保存する箱」に対して命令を出すための言語です。 データベースの中では、情報が表の形で管理されています。 例えば、会員名簿、社員一覧、商品のリストなどが代表的な例です。
MySQLは、そのSQLを使って操作できるデータベースソフトの一つで、初心者からプロまで幅広く使われています。
2. ORDER BYの基本をおさらいしよう
ORDER BYは、データの表示順を指定するための命令です。 年齢順、名前順、登録順など、見やすい形に並び替えることができます。
これまで学んだORDER BYでは、1つの列だけを基準に並び替えていました。 しかし実際の名簿や一覧表では、1つの条件だけでは足りない場面がよくあります。
3. サンプルとなるテーブルを確認しよう
ここではusersテーブルを使って、複数カラムのORDER BYを説明します。 会員情報が入った名簿だと考えてください。
id | name | age | email
---+------------+-----+-----------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 25 | ichiro@example.com
4 | 高橋美咲 | 19 | misaki@example.com
5 | 田中健一 | 30 | ken@example.com
4. 複数カラムのORDER BYとは何か
複数カラムのORDER BYとは、並び替えの基準を2つ以上指定する方法です。 まず1つ目の列で並び替えを行い、同じ値のデータがあった場合に、次の列でさらに並び替えます。
これは、名簿を「年齢順」に並べてから、「同じ年齢の人を名前順」に整える作業と同じです。 人が紙の名簿で自然にやっていることを、MySQLに指示しているだけです。
5. 年齢順に並べて、同じ年齢は名前順にする方法
まずは年齢を基準に昇順で並び替え、年齢が同じ人は名前順に並べてみましょう。 ORDER BYでは、列名をカンマで区切って書きます。
SELECT *
FROM users
ORDER BY age ASC, name ASC;
id | name | age | email
---+------------+-----+-----------------------
4 | 高橋美咲 | 19 | misaki@example.com
2 | 佐藤花子 | 19 | hanako@example.com
1 | 山田太郎 | 25 | taro@example.com
3 | 鈴木一郎 | 25 | ichiro@example.com
5 | 田中健一 | 30 | ken@example.com
6. 並び替えの優先順位を理解しよう
複数カラムのORDER BYでは、左から順番に優先されます。 一番左に書いた列が最も重要な並び替え条件です。
今回の例では、まずageで並び替えが行われ、 ageが同じデータだけに対してnameの並び替えが適用されています。 この考え方を理解すると、複雑な並び替えも怖くなくなります。
7. 昇順と降順を組み合わせる方法
複数カラムのORDER BYでは、それぞれの列に対して昇順や降順を指定できます。 例えば、「年齢は高い順、同じ年齢なら名前はあいうえお順」にしたい場合です。
SELECT *
FROM users
ORDER BY age DESC, name ASC;
id | name | age | email
---+------------+-----+-----------------------
5 | 田中健一 | 30 | ken@example.com
1 | 山田太郎 | 25 | taro@example.com
3 | 鈴木一郎 | 25 | ichiro@example.com
4 | 高橋美咲 | 19 | misaki@example.com
2 | 佐藤花子 | 19 | hanako@example.com
8. 複数カラムORDER BYを使うときの注意点
ORDER BYは、SELECT文の最後に書くというルールがあります。 また、列名の順番を間違えると、意図しない並び方になることがあります。
複数カラムのORDER BYは、検索結果を見やすく整理するためにとても重要な機能です。 名簿、一覧画面、管理画面など、実際のシステムでも頻繁に使われています。