首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

深入理解 Oracle 中的 NULL 值特性與比較邏輯

     編輯:Oracle 資料庫基礎

核心觀念

在 Oracle 中,NULL 是獨立的實體,與任何非空值(含空字串 ''、數值 0)均無可比性。

三大關鍵行為

1. 無法使用標準比較運算子

  • NULL = '' → FALSE
  • NULL != '' → FALSE
  • NULL = 0 → FALSE
  • NULL > 0 → FALSE
  • 甚至 NULL = NULL → FALSE
  • 唯一正確寫法:IS NULL / IS NOT NULL

2. WHERE 條件判定為 NULL 視同 FALSE

SELECT * FROM t WHERE col = '';   -- 不會回傳 col 為 NULL 的列
SELECT * FROM t WHERE col IS NULL; -- 正確寫法

任何依賴 NULL 結果的比較表達式,最終結果皆為 NULL,Oracle 在 WHERE 中視為 FALSE,故不回傳資料列也不報錯。

3. 空字串插入會自動轉為 NULL

INSERT INTO t (col) VALUES ('');  -- 實際存入 NULL
SELECT * FROM t WHERE col = '';   -- 查無資料
SELECT * FROM t WHERE col IS NULL; -- 可查到

此行為與 SQL Server 不同(SQL Server 會真正存入空字串),遷移專案需特別注意。

實務建議

  1. 設計欄位時明確決定是否允許 NULL,必要時加 NOT NULL 约束。
  2. 使用 NVL()、COALESCE()、NULLIF() 處理顯示與運算。
  3. 索引不儲存全 NULL 的鍵值,若需索引 NULL 可建立函數索引:CREATE INDEX idx_t_col ON t (NVL(col, 'NULL'));
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved