CodeGym /課程 /SQL SELF /認識 NULL。NULL 跟 0 有什麼不一樣

認識 NULL。NULL 跟 0 有什麼不一樣

SQL SELF
等級 9 , 課堂 0
開放

是時候來細聊一下 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 在聚合函數(像 AVGSUMMINMAX)裡會被忽略。但要小心!如果你想把 NULL 的行也算進去,就要多做點處理。

之後我們還會更深入學 NULL 怎麼用,敬請期待!

2
任務
SQL SELF, 等級 9, 課堂 0
上鎖
使用 HAVING 過濾平均評分
使用 HAVING 過濾平均評分
2
任務
SQL SELF, 等級 9, 課堂 0
上鎖
依地區統計客戶數量並進行篩選
依地區統計客戶數量並進行篩選
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION