MySQLでNULL値を含むカラムを並べ替える方法|IS NULLとORDER BYの活用
MySQLでは、ORDER BY句で並べ替えを行う際、NULL値がどの位置に表示されるか悩むことがあります。本記事では、IS NULL演算子を組み合わせることで、NULL値を含むレコードを末尾にまとめて並べ替える方法を、実際のサンプルコードとともにわかりやすく解説します。
テーブルの作成
まず、サンプル用のテーブルを作成します。
mysql> create table DemoTable707 (
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentFirstName varchar(100),
StudentMarks int
);
Query OK, 0 rows affected (0.59 sec)レコードの挿入
続いて、INSERTコマンドでレコードを挿入します。ここでは意図的に、StudentFirstNameがNULLのレコードもいくつか含めています。
mysql> insert into DemoTable707(StudentFirstName,StudentMarks) values('John',45);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable707(StudentFirstName,StudentMarks) values(NULL,65);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable707(StudentFirstName,StudentMarks) values('Chris',78);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable707(StudentFirstName,StudentMarks) values(NULL,89);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable707(StudentFirstName,StudentMarks) values('Robert',99);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable707(StudentFirstName,StudentMarks) values(NULL,34);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable707(StudentFirstName,StudentMarks) values('Mike',43);
Query OK, 1 row affected (0.20 sec)登録データの確認
SELECT文でテーブル内のすべてのレコードを表示してみましょう。
mysql> select *from DemoTable707;
実行結果は以下の通りです。
+-----------+------------------+--------------+ | StudentId | StudentFirstName | StudentMarks | +-----------+------------------+--------------+ | 1 | John | 45 | | 2 | NULL | 65 | | 3 | Chris | 78 | | 4 | NULL | 89 | | 5 | Robert | 99 | | 6 | NULL | 34 | | 7 | Mike | 43 | +-----------+------------------+--------------+ 7 rows in set (0.00 sec)
NULL値を考慮した並べ替えクエリ
以下のクエリを実行すると、NULL値のレコードを末尾にまとめて並べ替えることができます。
mysql> select *from DemoTable707 order by StudentFirstName IS NULL, StudentFirstName DESC;
実行結果は以下の通りです。
+-----------+------------------+--------------+ | StudentId | StudentFirstName | StudentMarks | +-----------+------------------+--------------+ | 5 | Robert | 99 | | 7 | Mike | 43 | | 1 | John | 45 | | 3 | Chris | 78 | | 2 | NULL | 65 | | 4 | NULL | 89 | | 6 | NULL | 34 | +-----------+------------------+--------------+ 7 rows in set (0.00 sec)
仕組みの解説
StudentFirstName IS NULLという式は、値がNULLの場合に「1」、NULLでない場合に「0」を返します。これを第1ソートキー(昇順)として指定することで、NULLでないレコードが先頭に、NULLのレコードが最後に集まる仕組みです。さらに第2ソートキーとしてStudentFirstName DESCを指定しているため、名前は降順(Robert → Mike → John → Chris)で並びます。
なお、逆にNULL値を先頭に表示したい場合は、この式にDESCを付けて降順にソートするだけで簡単に対応できます。
-
【MySQL】空の値(空文字列)をNULLに変換するUPDATEクエリの書き方
MySQLでは、UPDATE文のSET句とWHERE句を組み合わせるだけで、カラムに入っている空の値(空文字列)をNULLへ簡単に変換できます。ここからは、実際のサンプルを使って手順を詳しく解説していきます。 1. サンプルテーブルを作成する まず、以下のコマンドでテーブルを作成しましょう。 mysql> create table DemoTable1315 -> ( -> CountryName varchar(10) -> ); Query OK, 0 rows affected (0.60 sec) 2. レコードを挿入する 次に、INSERTコマンドでレコー
-
MySQLでNULL値を1として表示・更新する方法
MySQLでは、テーブル内のNULL値を別の値(たとえば「1」)に置き換えて扱いたい場面があります。この記事では、IFNULL関数とUPDATE文を組み合わせて、NULL値を1に変換する具体的な手順をサンプルコード付きで解説します。 1. サンプルテーブルを作成する まず、動作確認用のテーブルを作成します。 mysql> create table DemoTable1963 ( Counter int ); Query OK, 0 rows affected (0.00 sec) 2. レコードを挿入する INSERT文を使って、NULLを含む複数のレコードを