ใช้ IS NULL / IS NOT NULL
ใน SQL ต้องใช้ IS NULL และ IS NOT NULL — ไม่ใช้ = NULL
ตัวอย่าง: ตาราง demo86
CREATE TABLE demo86 (
value1 VARCHAR(20),
value2 VARCHAR(20)
);
INSERT INTO demo86 VALUES
(NULL, NULL), (NULL, 'John'), ('David', 'Mike'), ('Sam', NULL);
ข้อมูล
+--------+--------+ | value1 | value2 | +--------+--------+ | NULL | NULL | | NULL | John | | David | Mike | | Sam | NULL | +--------+--------+
คำสั่ง: หาแถวที่มี NULL อย่างน้อย 1 คอลัมน์
SELECT * FROM demo86 WHERE value1 IS NULL OR value2 IS NULL;
ผลลัพธ์ (3 แถว)
+--------+--------+ | value1 | value2 | +--------+--------+ | NULL | NULL | | NULL | John | | Sam | NULL | +--------+--------+
ทำไมไม่ใช้ = NULL?
SELECT * FROM demo86 WHERE value1 = NULL; -- ผลลัพธ์: 0 rows ❌ SELECT * FROM demo86 WHERE value1 IS NULL; -- ผลลัพธ์: 2 rows ✅
ใน SQL: NULL = NULL คือ UNKNOWN (ไม่ใช่ TRUE)
ฟังก์ชันจัดการ NULL
| ฟังก์ชัน | คำอธิบาย | ตัวอย่าง |
|---|---|---|
| IS NULL | เช็คเป็น NULL | WHERE col IS NULL |
| IS NOT NULL | เช็คไม่ใช่ NULL | WHERE col IS NOT NULL |
| COALESCE(a,b,c) | คืนค่าแรกที่ไม่ใช่ NULL | COALESCE(NULL, 'A', 'B') → 'A' |
| IFNULL(a, b) | MySQL: คืน b ถ้า a เป็น NULL | IFNULL(NULL, 'X') → 'X' |
| NULLIF(a, b) | คืน NULL ถ้า a = b | NULLIF(5, 5) → NULL |
<=> | Null-safe Equal | NULL <=> NULL → TRUE |
กรณีศึกษา: นับ NULL ต่อคอลัมน์
SELECT
SUM(CASE WHEN value1 IS NULL THEN 1 ELSE 0 END) AS null_count_v1,
SUM(CASE WHEN value2 IS NULL THEN 1 ELSE 0 END) AS null_count_v2
FROM demo86;
+---------------+---------------+ | null_count_v1 | null_count_v2 | +---------------+---------------+ | 2 | 2 | +---------------+---------------+
Best Practice: Schema Design
- ใช้
NOT NULLทุกคอลัมน์ที่เป็นไปได้ - ตั้ง
DEFAULTให้ชัดเจน (Empty string, 0, 'N/A' แทน NULL) - หลีกเลี่ยง NULL ใน Foreign Key, Primary Key, Indexed Columns
NULL ใน Aggregate Functions
COUNT(*): นับทุกแถว (รวม NULL)COUNT(col): นับเฉพาะ Non-NULLSUM, AVG, MIN, MAX: ข้าม NULL อัตโนมัติ