SQL 中 IS 與 = 的差異與使用時機
更新日期: 2025 年 3 月 4 日
在 SQL 中,=
和 IS
是兩個看似相似但用途不同的比較運算符。
許多初學者容易混淆它們的使用場景,特別是在處理 NULL
值時。
本篇文章將深入探討 =
與 IS
的差異、各自的適用時機,以及如何避免常見的錯誤。
=
運算符:用於一般值的比較
=
是 SQL 中的「等於」運算符,主要用於比較兩個具體的值。如果兩個值相等,則條件為 TRUE
,否則為 FALSE
。
=
的使用範例
假設有一個 Users
表,其中存放用戶的基本資訊:
CREATE TABLE Users (
UserID INT PRIMARY KEY,
Name VARCHAR(50),
Age INT
);
並插入一些測試數據:
INSERT INTO Users (UserID, Name, Age) VALUES (1, 'Alice', 25);
INSERT INTO Users (UserID, Name, Age) VALUES (2, 'Bob', 30);
INSERT INTO Users (UserID, Name, Age) VALUES (3, 'Charlie', NULL);
如果要查詢年齡為 25 的用戶,則可以使用 =
:
SELECT * FROM Users WHERE Age = 25;
結果:
UserID | Name | Age |
---|---|---|
1 | Alice | 25 |
這樣的查詢沒有問題,因為 Age = 25
是一個有效的比較。
IS
運算符:用於 NULL
值的比較
在 SQL 中,NULL
代表「未知」或「不存在」的值。
=
無法與 NULL
直接比較,因為 NULL
並不是一個確定的值,因此 NULL = NULL
也不會返回 TRUE
,而是 UNKNOWN
。
錯誤示範:使用 =
來比較 NULL
如果你嘗試查詢 Age
為 NULL
的用戶:
SELECT * FROM Users WHERE Age = NULL;
結果: 👉 此查詢不會返回任何結果! 因為 NULL = NULL
並不會返回 TRUE
,而是 UNKNOWN
,導致 SQL 無法匹配這條記錄。
正確做法:使用 IS NULL
若要查詢 Age
為 NULL
的用戶,應該使用 IS
運算符:
SELECT * FROM Users WHERE Age IS NULL;
結果:
UserID | Name | Age |
---|---|---|
3 | Charlie | NULL |
這樣才能正確地篩選出 NULL
值。
何時使用 IS
,何時使用 =
?
運算符 | 使用時機 | 範例 |
---|---|---|
= | 比較確定的值(數字、文字、日期等) | SELECT * FROM Users WHERE Age = 25; |
IS | 檢查 NULL 值 | SELECT * FROM Users WHERE Age IS NULL; |
若要查詢 Age
不為 NULL
的用戶,應該使用:
SELECT * FROM Users WHERE Age IS NOT NULL;
這樣可以篩選出 Age
有具體數值的記錄。
延伸學習:NULL 值對比陷阱
NULL
在 IN
運算符中的影響
考慮以下查詢:
SELECT * FROM Users WHERE Age IN (25, NULL);
你可能會以為這會找到 Age = 25
或 Age = NULL
的用戶,但實際上 NULL
會導致不確定性,因此 SQL 只會返回 Age = 25
的記錄,而不會匹配 NULL
值。
若要正確查詢包含 NULL
的條件,應該使用:
SELECT * FROM Users WHERE Age IN (25) OR Age IS NULL;
NULL
在 DISTINCT
、GROUP BY
和 COUNT
的影響
DISTINCT
在 DISTINCT
查詢時,NULL
會被視為同一個未知值:
SELECT DISTINCT Age FROM Users;
若 Users
表有多個 NULL
,結果仍只會顯示一個 NULL
。
GROUP BY
在 GROUP BY
查詢時,所有 NULL
值會被歸類到同一組:
SELECT Age, COUNT(*) FROM Users GROUP BY Age;
會成為一個單獨的分類。
COUNT
COUNT(*)
計算所有行數,而 COUNT(Age)
只會計算非 NULL
的行數:
SELECT COUNT(*) FROM Users; -- 計算所有用戶數
SELECT COUNT(Age) FROM Users; -- 只計算 Age 不為 NULL 的數據
結語
在 SQL 中,=
用於比較確定的值,而 IS
專門用於檢查 NULL
。
當處理數據時,務必要正確使用這些運算符,以避免無法篩選出 NULL
值的錯誤。
本篇文章希望幫助你更好地理解 IS
和 =
的差異,讓你的 SQL 查詢更準確、更高效! 🚀