在 MySQL 中,判斷欄位值是否為 NULL 是常見的查詢需求。MySQL 提供了 ISNULL() 函數,但其行為與 SQL Server 的同名函數有所不同。更常用、也更符合 SQL 標準的做法是使用 IS NULL 和 IS NOT NULL 運算子。
-- 查詢 name 為 NULL 的記錄
SELECT * FROM newtable WHERE name IS NULL;
-- 查詢 title 不為 NULL 的記錄
SELECT * FROM tbas_table WHERE title IS NOT NULL;
-- 實際業務範例
SELECT `click`, `title`, `created` FROM dcfsda_table WHERE click IS NOT NULL;
SELECT `id`, `title`, `describle` FROM bnsdh_table WHERE describle IS NOT NULL;
這是新手最常犯的錯誤。 在 SQL 中,NULL 代表「未知值」,NULL = NULL 的結果不是 true,而是 UNKNOWN(在 WHERE 子句中視為 false)。因此:
WHERE column = NULL 永遠不會返回任何行。WHERE column IS NULL。關於 IS NOT NULL 能否使用索引,網上流傳著「不能用索引」的說法,這並不準確。優化器的決策取決於具體的數據分佈和表結構:
「改寫為 click > 0 AND click < 100001」這類強制走索引的做法,只有在明確知道數據範圍且選擇性極高時才有效,否則屬於過早優化。
IS NULL / IS NOT NULL。ISNULL(expr) 函數在 MySQL 中僅返回 1 或 0,不建議用於 WHERE 子句過濾。IS [NOT] NULL 取決於代價模型,而非絕對規則。EXPLAIN 分析實際執行計劃,才是優化的正確路徑。