是時候來細聊一下 NULL 了。這可不是廢話,雖然這傢伙看起來……啥都沒有。如果資料表是一棟房子,NULL 就像是它的幽靈——安靜、神祕又難以預測。它好像在那,但你問它問題它不會回,計算時它不參與,連比較都閃避。這不只是「空」——這是 「啥都不知道」。
在 SQL 的世界裡,NULL 不是 0,不是空字串,也不是你習慣那種「沒有資料」。它是一個特別的「未知」符號,要小心對待。今天我們就來搞懂,為什麼 NULL 不是怪咖,而是每個資料庫都很重要的角色。因為它的意思就是 「值未知或未定義」。
NULL 跟空字串或數字 0 有什麼不一樣?
很多新手會把 NULL 跟其他值搞混,比如空字串 '' 或數字 0。來看看重點差別:
| 概念 | 值 |
|---|---|
NULL |
完全沒有值。這不只是空盒子,是連盒子都沒出現 |
| 空字串 | 這是個沒有任何字元的字串。例如:'' |
數字 0 |
一個明確的數值,就是零 |
舉個生活例子:假設你有一個員工表格,裡面存他們的薪水。如果薪水是 0,代表這個人沒拿到錢。如果薪水是 NULL,那就是你根本不知道他拿多少(或是還沒決定)。
怎麼解讀 NULL
現在我們大概知道 NULL 是啥了,來看看 SQL 怎麼處理它。最重要的一句話:NULL 什麼都不等於,也不不等於,連自己都不等於自己。
SELECT NULL = NULL; -- 結果:FALSE
驚喜吧!為什麼?因為 NULL 就是未知。如果你有兩個未知的值,你沒辦法說它們一樣,也不能說它們不一樣。
來看幾個例子:
NULL 操作範例
SELECT NULL + 1; -- 結果:NULL
SELECT NULL * 100; -- 結果:NULL
SELECT NULL = 0; -- 結果:FALSE
SELECT NULL <> 0; -- 結果:FALSE
NULL 不管加、乘還是其他運算,結果永遠是 NULL。這跟數學裡的 0 不一樣。就像你把東西丟進黑洞,黑洞啥都吞掉。
實戰範例
假設有個 students 表格,裡面有學生資訊:
| id | name | birth_date | grade |
|---|---|---|---|
| 1 | Alice | 2000-01-01 | 85 |
| 2 | Bob | NULL | 90 |
| 3 | Charlie | 1999-05-22 | NULL |
| 4 | Diana | NULL | NULL |
範例 1:NULL 在條件判斷的影響
如果我們想找沒有生日的學生,用 WHERE birth_date = NULL 這個條件:
SELECT *
FROM students
WHERE birth_date = NULL;
你會發現啥都查不到,因為 NULL = NULL 會回傳 FALSE。要檢查 NULL,要用 IS NULL:
SELECT * FROM students WHERE birth_date IS NULL;
結果:
| id | name | birth_date | grade |
|---|---|---|---|
| 2 | Bob | NULL | 90 |
| 4 | Diana | NULL | NULL |
範例 2:NULL 在計算裡的影響
| id | name | birth_date | grade |
|---|---|---|---|
| 1 | Alice | 2000-01-01 | 85 |
| 2 | Bob | NULL | 90 |
| 3 | Charlie | 1999-05-22 | NULL |
| 4 | Diana | NULL | NULL |
如果我們想算所有學生的平均分數:
SELECT AVG(grade) FROM students;
結果會是:87.5。為什麼?因為 NULL 在聚合函數(像 AVG、SUM、MIN、MAX)裡會被忽略。但要小心!如果你想把 NULL 的行也算進去,就要多做點處理。
之後我們還會更深入學 NULL 怎麼用,敬請期待!
GO TO FULL VERSION