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

วิธีแทนที่ค่า NULL ใน MySQL SELECT ด้วย IFNULL, COALESCE, CASE

การแทนที่ค่า 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                     |
+------------------------+

เปรียบเทียบ

คุณสมบัติIFNULLCOALESCECASE
มาตรฐาน SQLไม่ใช่ (MySQL only)ใช่ (ANSI)ใช่ (ANSI)
รองรับหลายคอลัมน์ไม่ได้ (2 args เท่านั้น)ได้ (n args)ได้ (ซับซ้อนกว่า)
เงื่อนไขซับซ้อนไม่ได้ไม่ได้ได้
ประสิทธิภาพเร็วที่สุดเร็วช้ากว่าเล็กน้อย

คำแนะนำ

  • ใช้ COALESCE สำหรับความเข้ากันได้ข้ามฐานข้อมูล
  • ใช้ IFNULL สำหรับ MySQL only และ performance critical
  • ใช้ CASE เมื่อมี logic ซับซ้อน (เช่น ตรวจสอบหลายเงื่อนไข)