處理 NULL 值

Oracle SQL 入門

Hadrien Lacroix

Content Developer

什麼是 NULL 值?

  • 無值
  • 與 0 不同
  • 含有 NULL 的運算結果為 NULL
    • NULL + 10 = NULL
  • 聚合函式通常會忽略 NULL
    • COUNT 不會計算欄位中的 NULL
Oracle SQL 入門

為什麼要在意 null 值?

真實世界的資料不完美。

  • 清理資料
  • 分析遺漏值
Oracle SQL 入門

測試是否為 NULL

不能用 = 測試 NULL

請改用:

  • IS NULL
    SELECT * FROM Customer WHERE LastName IS NULL
    
  • IS NOT NULL
    SELECT * FROM Customer WHERE LastName IS NOT NULL
    
Oracle SQL 入門

NVL

NVL(x, y):將可能為 null 的 x 轉成非 null 的 y

SELECT NVL(HireDate, '11/19/2004')
FROM Employee
Oracle SQL 入門

NULLIF

NULLIF(x, y):比較 xy,回傳:

  • x=y 則為 NULL
  • 若不相等則回傳 x
SELECT c.CustomerId, i.BillingCity, c.City, NULLIF(i.BillingCity, c.City) 
FROM Invoice i, Customer c
| CustomerId | BillingCity | City      | NULLIF |
|------------|-------------|-----------|--------|
| 48         | Oslo        | Amsterdam | Oslo   |
| 49         | Boston      | Vienne    | Boston |
| 59         | London      | London    | NULL   |
Oracle SQL 入門

COALESCE

COALESCE:回傳清單中第一個非 null 的值。

SELECT CustomerId, COALESCE(phone, email, fax) AS ContactMethod
FROM Customer
| CustomerId | ContactMethod           |
|------------|-------------------------|
| 59         | +91 080 22289999        |
| 58         | [email protected] |
| 57         | +56 (0)2 635 4444       |
Oracle SQL 入門

一起來練習吧!

Oracle SQL 入門

Preparing Video For Download...