文章目錄
- 1. 檢查是否為 NULL
- 2. NULL 值與比較運算符
- 3. 在聚合函數中處理 NULL
- 4. 在 WHERE 子句中的復雜條件
- 注意事項
在 PostgreSQL 中處理 NULL 值需要特別注意,因為 NULL 表示"未知"或"不存在"的值,與普通值的行為不同。以下是幾種處理 NULL 值的 SQL 條件寫法:
1. 檢查是否為 NULL
-- 使用 IS NULL 檢查 NULL 值
SELECT * FROM table_name WHERE column_name IS NULL;-- 使用 IS NOT NULL 檢查非 NULL 值
SELECT * FROM table_name WHERE column_name IS NOT NULL;
2. NULL 值與比較運算符
-- 以下寫法不會返回任何行,因為 NULL 不能與任何值比較
SELECT * FROM table_name WHERE column_name = NULL; -- 錯誤寫法
SELECT * FROM table_name WHERE column_name != NULL; -- 錯誤寫法-- 正確寫法是使用 IS NULL 或 IS NOT NULL
3. 在聚合函數中處理 NULL
-- COUNT 會忽略 NULL 值
SELECT COUNT(column_name) FROM table_name; -- 只計算非 NULL 值
SELECT COUNT(*) FROM table_name; -- 計算所有行,包括 NULL 值-- 其他聚合函數如 SUM, AVG 也會忽略 NULL 值
4. 在 WHERE 子句中的復雜條件
-- 查找值為 NULL 或滿足特定條件的行
SELECT * FROM table_name
WHERE column_name IS NULL OR column_name = 'some_value';-- 查找值不為 NULL 且滿足特定條件的行
SELECT * FROM table_name
WHERE column_name IS NOT NULL AND column_name LIKE 'A%';
注意事項
- NULL 不等于空字符串 ‘’,也不等于 0
- 任何與 NULL 的算術運算結果都是 NULL
- 在 UNIQUE 約束中,NULL 值被視為彼此不同(允許多個 NULL 值)
- 在 ORDER BY 中,NULL 值默認排在最后(可使用 NULLS FIRST/NULLS LAST 調整)