MySQLのORDER BYとNULLの並び順をやさしく解説|初心者向けSQL入門
生徒
「MySQLでORDER BYを使ったら、空欄みたいなデータが一番上に来たり下に来たりして、よく分からなくなりました…」
先生
「それはNULLという特別な値が関係しています。NULLの並び方は、数字や文字とは少し考え方が違うんです。」
生徒
「NULLって、空白とは違うんですか?」
先生
「はい。値が入っていない状態を表す特別な意味があります。名簿に何も書かれていない欄を想像すると分かりやすいですよ。」
1. SQLとは何か?
SQLは、データベースと呼ばれる「大量のデータを整理して保存する箱」に対して指示を出すための言語です。 データベースでは、情報が表の形で保存されています。 例えば、会員名簿、社員一覧、商品リストなどをパソコンの中で管理する仕組みです。
MySQLは、SQLを使って操作できる代表的なデータベースで、初心者の学習から実際のWebサービスまで幅広く使われています。
2. ORDER BYのおさらいと並び順の基本
ORDER BYは、SELECT文で取得したデータを並び替えるための命令です。 年齢順、名前順など、人が見て分かりやすい順番に整えるために使われます。
これまで学んだORDER BYでは、数字や文字の順番を意識してきましたが、 実際のデータベースには「値が入っていないデータ」も存在します。 それがNULLです。
3. NULLとは何かをやさしく理解しよう
NULL(ヌル)とは、「値が存在しない」という状態を表す特別な値です。 空文字や0とは違い、「まだ決まっていない」「入力されていない」ことを意味します。
紙の名簿で例えると、年齢を書く欄が空白のままになっている状態です。 書き忘れなのか、まだ情報がないのか分からない、という状態を表します。
4. サンプルとなるテーブルを確認しよう
NULLの並び順を確認するために、ageが未入力のデータを含むusersテーブルを使います。
id | name | age | email
---+------------+------+-----------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | NULL | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋美咲 | 22 | misaki@example.com
5 | 田中健一 | NULL | ken@example.com
5. ORDER BYでNULLを含めて並び替えるとどうなるか
まずは、ageを昇順で並び替えてみましょう。 このとき、NULLがどこに表示されるかがポイントです。
SELECT *
FROM users
ORDER BY age ASC;
id | name | age | email
---+------------+------+-----------------------
2 | 佐藤花子 | NULL | hanako@example.com
5 | 田中健一 | NULL | ken@example.com
4 | 高橋美咲 | 22 | misaki@example.com
1 | 山田太郎 | 25 | taro@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
MySQLでは、昇順の場合、NULLは一番小さいものとして扱われ、先頭に表示されます。
6. 降順にした場合のNULLの扱い
次に、ageを降順で並び替えてみましょう。 昇順とは逆の結果になります。
SELECT *
FROM users
ORDER BY age DESC;
id | name | age | email
---+------------+------+-----------------------
3 | 鈴木一郎 | 30 | ichiro@example.com
1 | 山田太郎 | 25 | taro@example.com
4 | 高橋美咲 | 22 | misaki@example.com
2 | 佐藤花子 | NULL | hanako@example.com
5 | 田中健一 | NULL | ken@example.com
降順では、NULLは最後に表示されます。 これは、MySQLがNULLを特別な値として扱っているためです。
7. NULLの並び順を意識することの大切さ
NULLを含むデータをORDER BYで並び替えると、 意図しない位置に表示されて驚くことがあります。 特に、一覧画面や管理画面では、NULLが先頭にあると見づらく感じることもあります。
MySQLでは、NULLもデータの一部として扱われるため、 「値がない」という状態をどう表示したいかを考えることが重要です。 これを意識するだけで、SQLの理解が一段深まります。
8. NULLを含むORDER BYを理解するための考え方
ORDER BYとNULLの関係を理解するコツは、 「NULLは数字でも文字でもない、特別な状態」と考えることです。
紙の名簿で、空白の行をどう並べるかを想像すると分かりやすくなります。 MySQLはその判断を自動で行っているだけなので、 NULLの性質を知っておけば、並び順に戸惑うことは少なくなります。