【MySQL】NULL以外の値を先頭に、NULL値を末尾に表示してソートする方法
はじめに
MySQLでは、ORDER BY句とIS NULLを組み合わせることで、NULL以外の値を持つ行を先に表示し、NULL値を持つ行を後に表示することができます。本記事では、実際のサンプルを使いながら、その具体的な手順と仕組みをわかりやすく解説します。
テーブルの作成
まずは、動作確認用のサンプルテーブルを作成しましょう。
mysql> create table DemoTable1357
-> (
-> StudentName varchar(40),
-> StudentCountryName varchar(30)
-> );
Query OK, 0 rows affected (0.49 sec)
レコードの挿入
次に、INSERTコマンドを使ってテーブルにデータを登録します。意図的にNULL値を含むレコードも挿入しておきます。
mysql> insert into DemoTable1357 values('Chris','US');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1357 values('David',NULL);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1357 values('David','AUS');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1357 values('Carol',NULL);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1357 values('Mike','UK');
Query OK, 1 row affected (0.15 sec)
登録したデータを確認する
SELECT文を実行して、テーブル内のすべてのレコードを表示してみましょう。
mysql> select * from DemoTable1357;
以下のような出力が得られます。
+-------------+--------------------+ | StudentName | StudentCountryName | +-------------+--------------------+ | Chris | US | | David | NULL | | David | AUS | | Carol | NULL | | Mike | UK | +-------------+--------------------+ 5 rows in set (0.00 sec)
NULL以外の値を先に、NULL値を後に表示するクエリ
NULL以外の値を持つ行を先頭に、NULL値を持つ行を末尾に表示するには、次のようにクエリを記述します。
mysql> select * from DemoTable1357
-> order by (StudentCountryName IS NULL),StudentName;
実行結果は以下のとおりです。
+-------------+--------------------+ | StudentName | StudentCountryName | +-------------+--------------------+ | Chris | US | | David | AUS | | Mike | UK | | Carol | NULL | | David | NULL | +-------------+--------------------+ 5 rows in set (0.00 sec)
仕組みの解説
(StudentCountryName IS NULL)という条件式は、値がNULLでない場合に「0」を、NULLである場合に「1」を返します。ORDER BYはデフォルトで昇順ソートを行うため、「0」の行(NULL以外)が先に、「1」の行(NULL)が後に並びます。
さらに第2ソートキーとしてStudentNameを指定しているので、各グループ内では学生名のアルファベット順に整列しています。Chris(US)、David(AUS)、Mike(UK)の順にNULL以外の行が表示され、その後にCarol(NULL)、David(NULL)と続いているのが確認できます。
まとめ
ORDER BY (カラム名 IS NULL)を活用すれば、NULL値の表示順序を柔軟に制御できます。逆にNULL値を先頭に表示したい場合は、ORDER BY (カラム名 IS NULL) DESCとすることで簡単に対応できます。NULLを含むデータの見せ方を工夫したい場面で、ぜひ活用してください。
-
MySQLにおける「!=NULL」と「IS NOT NULL」の違いとは?
MySQLでは、値を!=NULLと比較すると、結果は必ずNULLになります。つまり、!=NULLという比較は意味を持ちません。NULLは「不明な値」を表すため、通常の比較演算子では判定できないのです。NULL値を判定するには、専用の演算子であるIS NOT NULLを使用します。ここでは、!=NULLとIS NOT NULLの違いを実際に確認するために、まずテーブルを作成します。テーブルの作成まず、次のコマンドでテーブルを作成します。mysql> create table DemoTable1970 (
-
MySQLで列の値から先頭の1文字を取り出し、別の列に挿入する方法
はじめにMySQLである列(カラム)の値から先頭の1文字を取り出し、それを別の列に格納したい場合があります。このようなときに便利なのが LEFT() 関数です。LEFT() 関数は、文字列の左端から指定した文字数だけを抽出することができます。ここでは、実際にテーブルを作成しながら、その手順を順番に解説していきます。1. テーブルを作成するまず、サンプル用のテーブルを作成しましょう。ここでは「FirstLetter」(先頭文字を格納する列)と「Title」(元となる文字列の列)の2つの列を持つテーブルを定義します。mysql> create table DemoTable2036