การเตรียมข้อมูล
mysql> CREATE TABLE DemoTable1878 (FirstName VARCHAR(20));
mysql> INSERT INTO DemoTable1878 VALUES('Chris'), (NULL), ('David'), (NULL);
ข้อมูลก่อน
+-----------+
| FirstName |
+-----------+
| Chris |
| NULL |
| David |
| NULL |
+-----------+
ใช้ IFNULL แทนที่ NULL
mysql> SELECT IFNULL(FirstName, 'Robert') FROM DemoTable1878;
ผลลัพธ์:
+----------------------------+
| ifnull(FirstName,'Robert') |
+----------------------------+
| Chris |
| Robert |
| David |
| Robert |
+----------------------------+
IFNULL Syntax
IFNULL(expr1, expr2)
-- คืนค่า expr1 ถ้าไม่ใช่ NULL, ไม่งั้น expr2
IFNULL vs COALESCE vs CASE
| วิธี | Syntax | ความยืดหยุ่น |
|---|---|---|
| IFNULL | IFNULL(col, 'default') | 2 ค่า, MySQL Only |
| COALESCE | COALESCE(col1, col2, 'default') | หลายค่า, Standard SQL |
| CASE | CASE WHEN col IS NULL THEN 'd' ELSE col END | Complex Logic ได้ |
กรณีใช้งานจริง
- Report/Export: แทน NULL ด้วย '-' หรือ 'N/A'
- Concatenation:
CONCAT(IFNULL(first,''), ' ', IFNULL(last,'')) - Calculation:
IFNULL(price, 0) * quantity - Display:
IFNULL(phone, 'Not provided')
อัปเดตข้อมูลจริง (ไม่ใช่แค่ SELECT)
-- เปลี่ยน NULL เป็น 'Unknown' จริงในตาราง
UPDATE DemoTable1878 SET FirstName = 'Unknown' WHERE FirstName IS NULL;
-- หรือใช้ IFNULL ใน UPDATE (MySQL รองรับ)
UPDATE DemoTable1878 SET FirstName = IFNULL(FirstName, 'Unknown');
ข้อควรระวัง
- IFNULL/COALESCE ใน SELECT ไม่เปลี่ยนข้อมูลในตาราง
- Index:
WHERE IFNULL(col, '') = ''ไม่ใช้ Index ได้ - Data Type: ค่า Default ต้องเข้ากับ Data Type ของ Column