今回はSQLにおいてNULLを別の値に置き換えてくれるCOALESCE関数(コウアレス関数)について解説していきたいと思う。
COALESCE関数とは
COALESCE関数は指定したカラムがNULLだった場合にNULL値を指定した別の値に置き換えてくれる関数だ。
ちなみに読み方がわからない人も多いと思うが(私がそうだった)、コウアレスもしくはコーレスと読む。
例えば、下記のような一部値が入っていない=NULLがあるデータがあるとする。
上記データでNULL値があるquanityカラムに対して、COALESCE関数を使用してNULL値を0に置き換えたクエリとその結果が下記となる。
1 2 3 4 5 6 7 |
SELECT id ,name ,price ,COALESCE(quantity,0) AS quantity FROM purchase ; |
NULL値の部分だけがCOALESCE関数で指定した値(今回は0)に置き換わっていることがお分かりいただけると思う。
このようにCOALESCE関数はNULL値を指定した値に置換してくれるのだ。
また、COALESCE関数では下記のように引数として複数のカラムを指定することも出来る。
1 |
COALESCE(カラム①,カラム②,デフォルト値) |
その場合は、指定したカラムを左から順にチェックしていき、下記のような処理をしてくれる。
- カラム①の値がNULLでなければ、カラム①の値をそのまま表示させる
- カラム①の値がNULLだったら、カラム②の値を表示させる。
- カラム②の値もNULLだったら、デフォルト値を表示させる。
例えば、下記のcustomerテーブルがあるとする。
このテーブルをname1カラムとname2カラムを1つのカラムにまとめてしまいたい!
という時にCOALESCE関数を使用すれば下記のように1つのカラムにまとめることが可能だ。
1 2 3 4 5 |
SELECT id ,COALESCE(name1,name2,'名無し') AS name FROM customer ; |
- id=3ではname1カラムには値がなかったが、name2に値があったので、name2の値が表示されている
- id=5ではname1,name2のカラムどちらもNULLだったため、COALESCE関数で指定したデフォルト値が表示されている
- それ以外のデータはname1に値が入っていたので、name1の値が表示されている
このようにCOALESCE関数はNULLを別の値に置き換えるだけでなく、複数のカラムを統合(マージ)するような機能も持っている関数だ。
COALESCEを訳すと「合体する、融合する」という意味だから、複数のカラムを合体させる機能を持つというのは理解しやすいかもしれない。
COALESCE関数の使い方
COALESCE関数の使い方は下記だ。引数として何個でもカラムを指定することができるのとデフォルト値は省略可能な点を覚えておくと良いと思う。
これだけだと、「どういうこと?」と思う人も多いと思うが、先ほどの具体例に当てはめてみると理解しやすくなるはずだ。
COALESCE関数の使い方をしっかり把握したい人は是非サンプルデータでいいので試してみて欲しい。
一度実際に試してみればCOALESCE関数の使い方を把握するのはそこまで難しくないはずだ。
まとめ
今回はCOALESCE関数について紹介した。
NULL値を別の値に置き換えたい時や複数のカラムを統合したい時に便利な関数だ。
名前がやや難しいから避けがちな関数なのだが(私だけかもしれない(笑))、一度覚えてしまえば役に立つ関数なので是非この記事を参考に習得してもらえると嬉しい。