11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SQLにおけるNULLの扱い方

Last updated at Posted at 2018-06-11

#対象読者
・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]

#参考資料

11
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?