การแทนที่ค่า NULL ใน SELECT Statement
มี 3 วิธีหลักในการแทนที่ NULL ให้เป็นค่าอื่นขณะ SELECT โดยไม่เปลี่ยนข้อมูลจริงในตาราง
วิธีที่ 1: IFNULL() - MySQL Specific
SELECT IFNULL(yourColumn, 'replacement_value') AS alias FROM yourTable;
วิธีที่ 2: COALESCE() - ANSI SQL Standard
SELECT COALESCE(yourColumn, 'replacement_value') AS alias FROM yourTable;
วิธีที่ 3: CASE Statement - ยืดหยุ่นที่สุด
SELECT CASE
WHEN yourColumn IS NULL THEN 'replacement_value'
ELSE yourColumn
END AS alias
FROM yourTable;
ตัวอย่างการใช้งาน
สร้างตาราง:
CREATE TABLE ReplaceNULLDemo (
Id INT NOT NULL AUTO_INCREMENT,
Name VARCHAR(10),
Marks INT,
PRIMARY KEY(Id)
);
เพิ่มข้อมูล (มี NULL):
INSERT INTO ReplaceNULLDemo(Name, Marks) VALUES('Larry', 90);
INSERT INTO ReplaceNULLDemo(Name, Marks) VALUES('Carol', NULL);
INSERT INTO ReplaceNULLDemo(Name, Marks) VALUES('David', NULL);
INSERT INTO ReplaceNULLDemo(Name, Marks) VALUES('Bob', 67);
INSERT INTO ReplaceNULLDemo(Name, Marks) VALUES('Sam', 78);
INSERT INTO ReplaceNULLDemo(Name, Marks) VALUES('Mike', NULL);
INSERT INTO ReplaceNULLDemo(Name, Marks) VALUES('John', 98);
แทนที่ NULL ด้วย 0 ทั้ง 3 วิธี:
IFNULL()
SELECT IFNULL(Marks, 0) AS ReplacementOfNULLWith0 FROM ReplaceNULLDemo;
COALESCE()
SELECT COALESCE(Marks, 0) AS ReplacementOfNULLWith0 FROM ReplaceNULLDemo;
CASE
SELECT CASE WHEN Marks IS NULL THEN 0 ELSE Marks END AS ReplacementOfNULLWith0 FROM ReplaceNULLDemo;
ผลลัพธ์ทั้ง 3 วิธีเหมือนกัน:
+------------------------+
| ReplacementOfNULLWith0 |
+------------------------+
| 90 |
| 0 |
| 0 |
| 67 |
| 78 |
| 0 |
| 98 |
+------------------------+
เปรียบเทียบ
| คุณสมบัติ | IFNULL | COALESCE | CASE |
|---|---|---|---|
| มาตรฐาน SQL | ไม่ใช่ (MySQL only) | ใช่ (ANSI) | ใช่ (ANSI) |
| รองรับหลายคอลัมน์ | ไม่ได้ (2 args เท่านั้น) | ได้ (n args) | ได้ (ซับซ้อนกว่า) |
| เงื่อนไขซับซ้อน | ไม่ได้ | ไม่ได้ | ได้ |
| ประสิทธิภาพ | เร็วที่สุด | เร็ว | ช้ากว่าเล็กน้อย |
คำแนะนำ
- ใช้
COALESCEสำหรับความเข้ากันได้ข้ามฐานข้อมูล - ใช้
IFNULLสำหรับ MySQL only และ performance critical - ใช้
CASEเมื่อมี logic ซับซ้อน (เช่น ตรวจสอบหลายเงื่อนไข)