【初学者必見!】SQLの基本、実務使用例を徹底解説!coalesce編

初学者必見!SQLの使用例を解説!coalesce編 SQL

※この記事にはプロモーションが含まれています。

ふりかえり

筆者
筆者

本記事は、SQLの基本、実務使用例編になります。

SQLの基礎に関しましては、

【初学者必見!】SQLの超基礎編の記事をご覧くださいませ。

A子
A子

本編に入ります!

COALESCEとは?

COALESCESQL関数 の一つで、
複数の値の中から最初に「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について解説しました。

次回もお楽しみに!

この記事を書いた人
たくたく

文系出身・3年目のWeb系エンジニアです。
C#とSQLを得意としています。
同棲生活は2年目に入り、日々仲良く楽しく暮らしています。
プライベートではバイクや車で旅行に行くことが趣味です。
サンリオ好きで、中でもシナモン推しです。
お酒好きとして毎週の晩酌をリラックスタイムにしています。

たくたくをフォローする
SQLエンジニア
シェアする

コメント

タイトルとURLをコピーしました