Top > SQL 入門 > SELECT 文の活用(NULL 検索)

NULL 値の検索

IS NULL 比較演算子

NULL 値は WHERE colname = NULL のような条件では NULL のレコードを抽出することはできない。

SQL> set null '<NULL>'
SQL> select * from null_test;
 
COL
------
A
<NULL>
C
SQL> select * from null_test where col = null;
 
レコードが選択されませんでした。

参考 ⇒ set null '<NULL>'

NULL 値を抽出するには IS NULL を使用する。

SQL> select * from null_test where col IS NULL;
 
COL
------
<NULL>

NULL 値 以外 を抽出するには IS NOT NULL を使用する。

IS NULL は関数ではないので NOT IS NULL とは書かない

SQL> select * from null_test where col IS NOT NULL;
 
COL
------
A
C

NOT を使う場合には

SQL> select * from null_test where NOT col IS NULL;
 
COL
------
A
C

NULL とWHERE 条件

val の値条件式比較の結果
NULLval IS NULLTRUE
val IS NOT NULLFALSE
 
val の値条件式比較の結果
10val IS NULLFALSE
'abc'FALSE
10val IS NOT NULLTRUE
'abc'TRUE
 
val の値条件式比較の結果
NULLval = NULLUNKNOWN
(TRUE でも FALSEで もない)
NOT val = NULL
val = 10UNKNOWN
(TRUE でも FALSEで もない)
NOT val = 10
val <> 10
NOT val <> 10
val = 'abc'
NOT val = 'abc'
 
val の値条件式比較の結果
NULLval IN ( 1, 2, 3)UNKNOWN
(TRUE でも FALSEで もない)
val NOT IN ( 1, 2, 3)
val IN ( NULL, 2, 3)
val NOT IN ( NULL, 2, 3)
val IN ( 'a', 'b', 'c')
val NOT IN ( 'a', 'b', 'c')
val IN ( NULL, 'b', 'c')
val NOT IN ( NULL, 'b', 'c')

IS NULL は SELECT 項目にあまり使用しない

SQL> select case when col IS NULL then 'NULL' else 'NOT NULL' end from null_test;
 
CASEWHEN
--------
NOT NULL
NULL
NOT NULL

同じことは NVL2 関数 で記述可能

SQL> select nvl2(col, 'NOT NULL', 'NULL') from null_test;
 
NVL2(COL
--------
NOT NULL
NULL
NOT NULL

他にも NVL 関数、COALESCE 関数NULLIF 関数 などもある。
DECODE 関数 も NULL を取り扱える。

 


関連事項


SELECT 文の活用(NULL 検索)の関連トピックス

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)