MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

【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を含むデータの見せ方を工夫したい場面で、ぜひ活用してください。

  1. MySQLにおける「!=NULL」と「IS NOT NULL」の違いとは?

    MySQLでは、値を!=NULLと比較すると、結果は必ずNULLになります。つまり、!=NULLという比較は意味を持ちません。NULLは「不明な値」を表すため、通常の比較演算子では判定できないのです。NULL値を判定するには、専用の演算子であるIS NOT NULLを使用します。ここでは、!=NULLとIS NOT NULLの違いを実際に確認するために、まずテーブルを作成します。テーブルの作成まず、次のコマンドでテーブルを作成します。mysql> create table DemoTable1970     (    

  2. MySQLで列の値から先頭の1文字を取り出し、別の列に挿入する方法

    はじめにMySQLである列(カラム)の値から先頭の1文字を取り出し、それを別の列に格納したい場合があります。このようなときに便利なのが LEFT() 関数です。LEFT() 関数は、文字列の左端から指定した文字数だけを抽出することができます。ここでは、実際にテーブルを作成しながら、その手順を順番に解説していきます。1. テーブルを作成するまず、サンプル用のテーブルを作成しましょう。ここでは「FirstLetter」(先頭文字を格納する列)と「Title」(元となる文字列の列)の2つの列を持つテーブルを定義します。mysql> create table DemoTable2036