nullを置換したい時があると思います。Mysql、PostgreSQLでnullを変換するのにはCOALESCE()を使います。
ちなみにCOALESCEの読み方はコアレスです。
動作環境
SQL FIDDLEでMySQL5.6、PostgreSQL9.6で動作確認しました。
下記文章は主にPostgreSQLで仕様で調べています。
COALESCE()とは
COALESCE()とは、NULLでない最初の引数を返します。
全ての引数がNULLの場合にはNULLが返されます。
主にnullを変換することに使われています。
構文
COALESCE(value [, …])
よく使う書き方に置き換えると以下のようになります。
COALESCE(value, ‘nullを変換したい値’)
実際に書いてみよう!
実際にサンプルコードで動きを見ながら使い方を確認してみましょう。
準備
以下のテーブルを使用してサンプルコードを作成します。
| temid | tittle | episode |
|---|---|---|
| 1 | 家政婦は見た! | (null) |
| 2 | 金田一少年の事件簿 | 第2話 |
| 3 | (null) | 第3話 |
| 4 | リーガルハイ | (null) |
| 5 | (null) | (null) |
— CREATE文
CREATE TABLE item (
ItemID numeric(8, 0) unique not null,
Tittle character varying (20) ,
episode character varying (20),
primary key(ItemID)
);
— INSERT文
insert into item
values(0001, ‘家政婦は見た!’, null),
(0002, ‘金田一少年の事件簿’, ‘第2話’),
(0003, null, ‘第3話’),
(0004, ‘リーガルハイ’, null),
(0005, null, null)
COALESCE()でnullを変換
SELECT
COALESCE(itemID),
COALESCE(tittle, ‘null変換’),
COALESCE(episode, ‘null変換’)
FROM
item
■ 結果
| COALESCE(itemID) | COALESCE(tittle, ‘null変換’) | COALESCE(episode, ‘null変換’) |
|---|---|---|
| 1 | 家政婦は見た! | null変換 |
| 2 | 金田一少年の事件簿 | 第2話 |
| 3 | null変換 | 第3話 |
| 4 | リーガルハイ | null変換 |
| 5 | null変換 | null変換 |
nullをnull変換に変換してみました。
すごく不思議だけど、COALESCE(値)だけでも使える。どんな時に使うんだろう。
COALESCE()で複数列がnullだったら変換
SELECT
COALESCE(Tittle, episode, ‘null変換’)
FROM
item
■ 結果
| COALESCE(Tittle, episode, ‘null変換’) |
|---|
| 家政婦は見た! |
| 金田一少年の事件簿 |
| 第3話 |
| リーガルハイ |
| null変換 |
第一引数のTittleがnullだった場合(値があればその値を返す)、第二引数のepisodeをnullかどうか判定します。そして第二引数のepisodeがnullだった場合、第三引数を返します。
上記例では3番目ばでしかないですが、増やすことも可能です。
おわり
テーブルに新しく列を追加することになった時に、すでに存在する行数に対してデフォルト値を設定する時にCOALESCE()使いました。勉強しておいて助かりました。
COALESCEスペルが難しいですよね。
