2章: where句
12.OracleにおけるNULL
1. NULLの基本概念
SQL標準では NULLは「値」ではなく「未知・存在しない値」。
そのため
-
= NULLは使えない -
IS NULL/IS NOT NULLを使う
2. Oracle特有のNULLの扱い(最大の注意点)
空文字列 '' を NULLとして扱う
- Oracleでは 空文字列 = NULL
- VARCHAR列に
''を保存すると、実際には NULLが格納される - 他DB(PostgreSQL / MySQL など)とは挙動が異なる
3. 文字列連結時の挙動
dummy || ''
dummy || NULL
- Oracleでは どちらも元の文字列を返す
- 本来期待される「NULLになる」挙動ではない
4. 危険性・問題点
-
空文字とNULLの区別ができない
-
アプリケーションや他DBとの移植時にバグの原因になる
-
NULL判定を誤ると、意図しない検索結果になる
5. インデックスとの関係(予告的ポイント)
- Oracleでは NULLはインデックス上で特別扱い
- NULL値は通常 B-treeインデックスに格納されない
→ WHERE句とインデックス利用に影響する
まとめ
Oracleでは「空文字列 = NULL」という非標準仕様があり、検索・連結・インデックスの挙動に注意が必要