LoginSignup
4
1

MySQLによる"NULL"の扱いについて

Posted at

前提

  • MySQL: 5.7.43

ORDER BY句によるソート結果でのNULL

以下のようなテーブルがあるとします。

mysql> select name, x from tmp;
+------+------+
| name | x    |
+------+------+
| A    |    3 |
| B    |    0 |
| C    | NULL |
| D    |     1|
+------+------+

ここで、xについてORDER BYで指定し昇順で表示させると、NULLが最も上位に表示されます。
逆に、降順でORDER BYを指定すると、NULLは最下位に表示されます。
これはNULLに対する仕様として把握しておいた方が良い内容です。

mysql> select name, x from Greatests order by x;
+------+------+
| name | x    |
+------+------+
| C    | NULL |
| B    |    0 |
| D    |    1 |
| A    |    3 |
+------+------+

mysql> select name, x from tmp order by x desc;
+------+------+
| name | x    |
+------+------+
| A    |    3 |
| D    |    1 |
| B    |    0 |
| C    | NULL |
+------+------+

NULLと文字列の結合

CONCAT関数は、以下のように引数を結合する関数です。

mysql> SELECT CONCAT('hoge', 'foo');
+-----------------------+
| CONCAT('hoge', 'foo') |
+-----------------------+
| hogefoo               |
+-----------------------+

ただし、引数の中に一つでもNULLが含まれる場合、出力結果はNULLとなってしまいます。
これは特に注意しなければならない仕様です。

mysql> SELECT CONCAT('hoge', 'foo', NULL);
+-----------------------------+
| CONCAT('hoge', 'foo', NULL) |
+-----------------------------+
| NULL                        |
+-----------------------------+

COALESCE関数

COALESCE関数とは、引数の中で一番最初の非NULL値を返す関数です。
NULLのデータが含まれる可能性のあるカラムなどがある場合は、この関数を使用した方が良いでしょう。

mysql> SELECT COALESCE(NULL,1, NULL);
        -> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
        -> NULL
4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1