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;

結果:

UserIDNameAge
1Alice25

這樣的查詢沒有問題,因為 Age = 25 是一個有效的比較。


IS 運算符:用於 NULL 值的比較

在 SQL 中,NULL 代表「未知」或「不存在」的值。

= 無法與 NULL 直接比較,因為 NULL 並不是一個確定的值,因此 NULL = NULL 也不會返回 TRUE,而是 UNKNOWN

錯誤示範:使用 = 來比較 NULL

如果你嘗試查詢 AgeNULL 的用戶:

SELECT * FROM Users WHERE Age = NULL;

結果: 👉 此查詢不會返回任何結果! 因為 NULL = NULL 並不會返回 TRUE,而是 UNKNOWN,導致 SQL 無法匹配這條記錄。

正確做法:使用 IS NULL

若要查詢 AgeNULL 的用戶,應該使用 IS 運算符:

SELECT * FROM Users WHERE Age IS NULL;

結果:

UserIDNameAge
3CharlieNULL

這樣才能正確地篩選出 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 值對比陷阱

NULLIN 運算符中的影響

考慮以下查詢:

SELECT * FROM Users WHERE Age IN (25, NULL);

你可能會以為這會找到 Age = 25Age = NULL 的用戶,但實際上 NULL 會導致不確定性,因此 SQL 只會返回 Age = 25 的記錄,而不會匹配 NULL 值。

若要正確查詢包含 NULL 的條件,應該使用:

SELECT * FROM Users WHERE Age IN (25) OR Age IS NULL;

NULLDISTINCTGROUP BYCOUNT 的影響

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 查詢更準確、更高效! 🚀

Similar Posts