Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

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
NameAlice
Age25

這樣的查詢沒有問題,因為 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;

結果:

UserIDNameAge
3CharlieNULL
NameCharlie
AgeNULL

這樣才能正確地篩選出 NULL 值。


何時使用 IS,何時使用 =?

運算符使用時機範例
=比較確定的值(數字、文字、日期等)SELECT * FROM Users WHERE Age = 25;
IS檢查 NULL 值SELECT * FROM Users WHERE Age IS NULL;
使用時機比較確定的值(數字、文字、日期等)
範例SELECT * FROM Users WHERE Age = 25;
使用時機檢查 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 查詢更準確、更高效! 🚀

目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

資料庫

目錄

  • = 運算符:用於一般值的比較
  • = 的使用範例
  • IS 運算符:用於 NULL 值的比較
  • 錯誤示範:使用 = 來比較 NULL
  • 正確做法:使用 IS NULL
  • 何時使用 IS,何時使用 =?
  • 延伸學習:NULL 值對比陷阱
  • NULL 在 IN 運算符中的影響
  • NULL 在 DISTINCT、GROUP BY 和 COUNT 的影響
  • 結語