🫥
MySQLによる"NULL"の扱いについて
前提
- 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
Discussion