🦑
SQL便利構文解説①
はじめに
RDBユーザーのみなさんこんにちは。
今回の記事ではSQLで使える便利な構文を解説します。
NULLIF(値1, 値2)
機能
「値1 = 値2」のときにNULLを返す。
それ以外はそのまま第一引数(今回の場合は値2)を返す。
目的
空文字('')などををNULLとして扱うために使う。
例
NULLIF('abc', '') -- return 'abc'
NULLIF('', '') -- return NULL
COALESCE(値1, 値2, ...)
機能
最初にNULLでない値を返す。
引数の数に制限はなく、「最初に有効な値(NULLでない値)」を使いたいときに便利。
例
COALESCE(NULL, NULL, 'abc', 'def') -- return 'abc'
COALESCE(NULL, '') --return ''
NULLIFとCOALESCEの組み合わせ
上記二つの関数を組み合わせるとある値が使えない値(NULLや空文字)場合に、代替の値を使う
というようにカラム取得に優先順位をつけることができます。
例
--customer_name : 顧客名
-- PIC_name : 担当者名(PIC = person in charge)
COALESCE(NULLIF(customer_name, ''), PIC_name)
処理の流れ
- NULLIF(customer_name, '')
→customer_nameが空文字ならNULLを返す。空文字でないならそのままの値を返す。 - COALESCE(..., PIC_name)
→1の結果がNULLなら、代わりにPIC_nameを使う
結果
customer_nameに値がある→その値を使用する。
customer_nameが空文字orNULL→PIC_nameを使用する。
実用ポイント
この二つの関数の組合せの構文は「データに優先順位をつけて取得したい」ときに便利。
例えば
- 顧客名が空なら担当者名を出す
- メモがなければ備考を出す
- 支店住所がなければ本社住所を出す
おわりに
この構文を使うと不必要なカラムを取得する必要がないため、クエリがスッキリします。
一方でかえってクエリが読みにくくなっている、と感じる人もいるかもしれません。
そこはチームの開発状況に合わせて使い分けてください。
Discussion