🦑

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) 

処理の流れ

  1. NULLIF(customer_name, '')
    →customer_nameが空文字ならNULLを返す。空文字でないならそのままの値を返す。
  2. COALESCE(..., PIC_name)
    →1の結果がNULLなら、代わりにPIC_nameを使う

結果

customer_nameに値がある→その値を使用する。
customer_nameが空文字orNULL→PIC_nameを使用する。

実用ポイント

この二つの関数の組合せの構文は「データに優先順位をつけて取得したい」ときに便利。
例えば

  • 顧客名が空なら担当者名を出す
  • メモがなければ備考を出す
  • 支店住所がなければ本社住所を出す

おわりに

この構文を使うと不必要なカラムを取得する必要がないため、クエリがスッキリします。
一方でかえってクエリが読みにくくなっている、と感じる人もいるかもしれません。
そこはチームの開発状況に合わせて使い分けてください。

Discussion