目次
ふりかえり

筆者
本記事は、SQLの基本、実務使用例編になります。
SQLの基礎に関しましては、
【初学者必見!】SQLの超基礎編の記事をご覧くださいませ。

A子
本編に入ります!
COALESCEとは?
COALESCEは SQL関数 の一つで、
複数の値の中から最初に「NULLでない値」を返す 関数です。
関数の基本構文

筆者
基本構文から見ていきましょう!
coalesce(値1, 値2, 値3, ...)
左から順に見ていって、最初に NULLでない 値を返します。
すべてがNULLの場合は、結果もNULLになります。
COALESCE関数の活用例:転入生と在籍者の情報取得
シナリオ
- 在籍者テーブル:通常の生徒のデータ(4月末のバッチで更新される)
- 転入生入学予定テーブル:転入予定者のデータ(入学前でも存在する)
例えば、4月10日に学校のシステムで「その時点の生徒一覧」を出したい。
でもこの段階では、転入生のデータが「在籍者テーブル」にまだ入っていない。
どうするか?
→ 両方のテーブルを見て、「どちらかにあれば」その生徒情報を出したい!
このときに便利なのが COALESCE関数。
select
coalesce(在籍者.氏名, 転入予定.氏名) as 氏名,
coalesce(在籍者.学年, 転入予定.学年) as 学年
from
生徒マスタ
left join 在籍者 on 生徒マスタ.生徒ID = 在籍者.生徒ID
left join 転入予定 on 生徒マスタ.生徒ID = 転入予定.生徒ID
このようにすると:
- 在籍者テーブルにデータがあればそれを使う
- なければ転入予定テーブルの値を使う
結果イメージ
| 生徒ID | 氏名 | 学年 |
|---|---|---|
| 1001 | 山田花子 | 2年 |
| 1002 | 田中一郎 | 1年 |
ポイント整理
| 項目 | 内容 |
|---|---|
| 問題 | 転入生はまだ在籍者テーブルにいない |
| 解決策 | COALESCE(在籍者, 転入予定)で「どちらかある方」を取る |
| メリット | 将来のデータ欠損に強くなり、バッチ前でもデータが取得できる |
COALESCEのメリット
| メリット | 説明 |
|---|---|
| ① NULL回避ができる | 最初にNULLでない値を返すため、データが欠けていてもエラーや空白を回避できる。 |
| ② 代替データの指定が簡単 | 「もし在籍者にいなければ、転入予定から取る」のような処理が1行でできる。 |
| ③ 複数の候補を一括で扱える | coalesce(A, B, C, '未設定') のように複数の候補を順に評価できる。 |
| ④ 読みやすく保守しやすい | CASE WHEN よりも簡潔なので、SQLが読みやすくなる。 |
| ⑤ ビューや関数でも使いやすい | 共通化されたロジック(例:在籍情報の取得関数)でも柔軟に使える。 |
| ⑥ デフォルト値を簡単に入れられる | 例:coalesce(電話番号, '未登録') でNULLを文字列に置き換えられる。 |
実務でありがちな使い方
- 在籍者 or 転入予定のどちらかに情報がある →
coalesce(在籍者.氏名, 転入予定.氏名) - NULLなら「未設定」と表示したい →
coalesce(住所, '未設定') - 文字列や日付のつなぎ合わせの途中でNULLを避けたい →
coalesce(名前, '') || 'さん'
注意点
- すべての引数がNULLだと結果もNULLになる
① NULLなら「未設定」と表示したい
select coalesce(住所, '未設定') as 表示用住所
from 顧客テーブル;
解説:
住所が NULL(=未入力) のときに、代わりに 「未設定」 と表示します。- つまり、「住所があればそれを出す」「なければ『未設定』を出す」という処理です。
こんなときに使う!
| 顧客名 | 住所 | coalesce(住所, ‘未設定’) |
|---|---|---|
| 山田 | 東京都港区 | 東京都港区 |
| 佐藤 | NULL | 未設定 |
② 文字列や日付のつなぎ合わせの途中でNULLを避けたい
select coalesce(名前, '') || 'さん' as 表示名
from 顧客テーブル;
解説:
||は 文字列の結合 を意味します。- 名前が NULL の場合、そのまま
'NULLさん'みたいにならないように、
→coalesce(名前, '')で 空文字 に置き換えています。
こんなときに使う!
| 名前 | coalesce(名前, ”) || ‘さん’ |
|——–|—————————–|
| 鈴木 | 鈴木さん |
| NULL | さん |
✔
NULL || 'さん'のようにすると、全体がNULLになってしまうので、先に空文字に変えるのがポイントです。
まとめ
| シーン | 使い方 | 結果 |
|---|---|---|
| データが未入力のときに代わりの表示を出したい | coalesce(住所, '未設定') | 「未設定」と表示 |
| 文字列のつなぎ合わせ時にNULLを避けたい | `coalesce(名前, ”) |

筆者
coalesceについて解説しました。
次回もお楽しみに!










コメント