Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ตรวจสอบค่า NULL ในแถวเดียวของตาราง MySQL

ใช้ 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เช็คเป็น NULLWHERE col IS NULL
IS NOT NULLเช็คไม่ใช่ NULLWHERE col IS NOT NULL
COALESCE(a,b,c)คืนค่าแรกที่ไม่ใช่ NULLCOALESCE(NULL, 'A', 'B') → 'A'
IFNULL(a, b)MySQL: คืน b ถ้า a เป็น NULLIFNULL(NULL, 'X') → 'X'
NULLIF(a, b)คืน NULL ถ้า a = bNULLIF(5, 5) → NULL
<=>Null-safe EqualNULL <=> 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-NULL
  • SUM, AVG, MIN, MAX: ข้าม NULL อัตโนมัติ