#対象読者
・SQL初心者の方(SQLにおけるNULLの扱い方を知らない方)
#前提
・Oracle Database 12c
※PostgreSQL, MySQLで使用可能な関数も出てくるのでご安心を!
#NULLを扱うための関数
##NVL
指定した列の状態(NULLかどうか)に応じて結果を返します。
例えば、売上高の合計値を算出したいもののSUM対象のすべてNULLになる可能性がある場合、**SUM(NVL(sales, 0))**と表現すれば結果がNULLになることはありません。
NVL(式1, 式2)
式1 | 式2 | 結果 |
---|---|---|
NULL以外 | NULL以外 | 式1 |
NULL以外 | NULL | 式1 |
NULL | NULL以外 | 式2 |
NULL | NULL | NULL |
##NVL2
式1の状態に応じて式2または式3を返します。
NVL(式1, 式2, 式3)
式1 | 結果 |
---|---|
NULL以外 | 式1 |
NULL | 式2 |
##COALESCE
引数の式を左から順に評価し、最初に見つかったNULL以外の値を返します。
式リスト内のデータ型はすべて一致している必要があるので注意が必要です。一致していない場合はエラーとなります。
COALESCE(式1, 式2 [, 式n])
式1 | 式n | 結果 |
---|---|---|
NULL以外 | NULL以外 | 式1 |
NULL以外 | NULL | 式1 |
NULL | NULL以外 | 式n |
NULL | NULL | NULL |
##NVLとCOALESCEの違い
関数 | 式リスト | 式リストの値の型変換 |
---|---|---|
NVL, NVL2 | 固定長 | 暗黙的な変換 |
COALESCE | 可変長 | 型変換しない |
ちなみに、NVLはOracle独自の関数ですが、COALESCEはPostgreQLでもMySQLでも使えるようです。
#おまけ:ORDER BYでNULLの表示順を指定する
##NULLS FIRST/LAST
ORDER BYでソートする際、NULLを最初に表示させるか、最後に表示させるかを選ぶことができます。ちなみに、PostgreSQLでも同様にNULLS FAST/LASTが使えるそうです。
PostgreSQLのソートで、nullの位置を制御する
ORDER BY 列名 [NULLS FIRST or NULLS LAST]
#参考資料