- 1 1. บทนำ
- 2 2. ฟังก์ชัน IFNULL คืออะไร?
- 3 3. ตัวอย่างปฏิบัติของฟังก์ชัน IFNULL
- 4 3.5 วางค่า NULL ไว้ท้ายใน ORDER BY
- 5 4. ความแตกต่างระหว่าง IFNULL กับ COALESCE
- 6 5. ฟังก์ชันการจัดการ NULL ในฐานข้อมูลที่ไม่ใช่ MySQL
- 7 6. คำถามที่พบบ่อย (FAQ)
- 7.1 คำถามที่ 1. ฟังก์ชัน IFNULL กับฟังก์ชัน NVL เป็นฟังก์ชันเดียวกันหรือไม่?
- 7.2 คำถามที่ 2. ความแตกต่างระหว่าง IFNULL กับ COALESCE คืออะไร?
- 7.3 คำถามที่ 3. IFNULL สามารถใช้กับประเภทข้อมูลอื่นนอกจากตัวเลขได้หรือไม่?
- 7.4 คำถามที่ 4. การใช้ IFNULL ทำให้ประสิทธิภาพลดลงหรือไม่?
- 7.5 คำถามที่ 5. สามารถใช้ CASE แทน IFNULL ได้หรือไม่?
- 7.6 คำถามที่ 6. IFNULL สามารถใช้ในเงื่อนไข WHERE ได้หรือไม่?
- 7.7 สรุป
- 8 7. สรุป
1. บทนำ
เมื่อทำงานกับฐานข้อมูล การจัดการค่าค่า NULL เป็นจุดสำคัญ
โดยเฉพาะอย่างยิ่ง ไม่ใช่เรื่องแปลกที่ ผู้ที่เคยชินกับฟังก์ชัน NVL ของ Oracle จะพบว่า NVL ไม่มีให้ใช้เมื่อย้ายไปยัง MySQL。
ใน MySQL คุณสามารถจัดการค่าค่า NULL ได้อย่างเหมาะสมโดยใช้ฟังก์ชัน IFNULL แทน NVL
บทความนี้จะอธิบาย วิธีการทำงานกับค่าค่า NULL ใน MySQL อย่างละเอียด โดยครอบคลุมวิธีใช้ IFNULL และความแตกต่างจากฟังก์ชันจัดการ NULL อื่นๆ
1.1 ค่าค่า NULL คืออะไร?
ในฐานข้อมูล NULL หมายถึง “ยังไม่ได้กำหนดค่า”
เนื่องจากสิ่งนี้ แตกต่างจาก “0” หรือ “สตริงว่าง” การไม่จัดการอย่างเหมาะสมอาจนำไปสู่ข้อผิดพลาดที่ไม่คาดคิดหรือผลลัพธ์การค้นหาที่ไม่ถูกต้อง
ตัวอย่างเช่น สมมติว่าคุณมีข้อมูลดังนี้
| ID | Name | Age |
|---|---|---|
| 1 | Yamada | 25 |
| 2 | Sato | NULL |
| 3 | Suzuki | 30 |
ในข้อมูลข้างต้น อายุของ ID “2” (Sato) คือ NULL
หากคุณรันการคำนวณตามนั้น คุณอาจได้รับข้อผิดพลาดหรือผลลัพธ์ที่ไม่ตั้งใจ
1.2 MySQL จัดการค่าค่า NULL อย่างไร
2. ฟังก์ชัน IFNULL คืออะไร?
MySQL มีฟังก์ชัน IFNULL เป็น ฟังก์ชันสำหรับแทนที่ค่าค่า NULL ด้วยค่าอื่น
มันมีบทบาทคล้ายกับฟังก์ชัน NVL ของ Oracle
โดยการจัดการค่าค่า NULL อย่างเหมาะสม คุณสามารถป้องกันปัญหาการคำนวณที่เกิดจากข้อมูลที่ขาดหายไปและสร้างคำสั่ง SQL ที่เสถียรกว่า
มาดูการใช้งานพื้นฐานของ IFNULL กันอย่างละเอียด
2.1 โครงสร้างพื้นฐานของ IFNULL
โครงสร้างพื้นฐานของฟังก์ชัน IFNULL คือดังนี้
IFNULL(expression, fallback_value)
- expression : คอลัมน์หรือค่าที่จะตรวจสอบสำหรับ NULL
- fallback_value : ค่าที่จะส่งคืนเมื่อ expression เป็น NULL (หากไม่ใช่ NULL จะส่งคืน expression ตามเดิม)
ตัวอย่างเช่น พิจารณาคำสั่ง SQL ต่อไปนี้
SELECT IFNULL(NULL, 'Fallback value');
ในกรณีนี้ เนื่องจากระบุ NULL ผลลัพธ์จึงกลายเป็น 'Fallback value'
| Result |
|---|
| Fallback value |
ในทางตรงกันข้าม หากคุณระบุค่าที่ไม่ใช่ NULL ค่านั้นจะถูกส่งคืนตามเดิม
SELECT IFNULL('Hello', 'Fallback value');
| Result |
|---|
| Hello |
2.2 ลักษณะสำคัญของ IFNULL
ฟังก์ชัน IFNULL มีลักษณะดังต่อไปนี้
- สามารถแปลงค่าค่า NULL เป็นค่าที่เฉพาะเจาะจง
- คุณสามารถตั้งค่าพื้นฐานทางเลือกสำหรับคอลัมน์ที่อาจมี NULL
- ใช้โครงสร้างที่เรียบง่าย
- เรียบง่ายกว่าการใช้ expression
CASE
- ควรพิจารณาประเภทข้อมูล
- แนะนำให้อาร์กิวเมนต์ของ
IFNULLเป็นประเภทข้อมูลเดียวกัน
ตัวอย่างเช่น คำสั่ง SQL ต่อไปนี้อาจทำให้เกิดข้อผิดพลาด
SELECT IFNULL(100, 'Error');
เหตุผล: ประเภทตัวเลข (100) และประเภทสตริง (‘Error’) ผสมกัน
ในกรณีนี้ ค่าทางเลือกควรเป็นตัวเลขด้วย
SELECT IFNULL(100, 0);
2.3 เมื่อใดควรใช้ IFNULL
นี่คือสถานการณ์ปฏิบัติที่ IFNULL มีประโยชน์
- ตั้งค่าพื้นฐานสำหรับ NULL
- ตัวอย่างเช่น หากโบนัสของพนักงานเป็น NULL ให้ตั้งเป็น 0
SELECT name, IFNULL(bonus, 0) AS bonus FROM employees;
- หลีกเลี่ยงการคำนวณที่เกี่ยวข้องกับ NULL
- หากคุณคำนวณด้วย NULL ตามนั้น ผลลัพธ์ก็จะกลายเป็น NULL
- การใช้
IFNULLเพื่อหลีกเลี่ยง NULL จะช่วยให้การคำนวณตามที่ตั้งใจเกิดขึ้นSELECT name, salary, IFNULL(bonus, 0) AS bonus, salary + IFNULL(bonus, 0) AS total_income FROM employees;
- จัดการ NULL อย่างเหมาะสมในรายงานและการรวมข้อมูล
- หากมี NULL ระหว่างการวิเคราะห์ อาจทำให้เกิดรายงานที่ไม่ถูกต้อง
- โดยการแทนที่ NULL ด้วยค่าที่เฉพาะเจาะจงโดยใช้
IFNULLคุณสามารถประมวลผลข้อมูลได้อย่างสม่ำเสมอ
3. ตัวอย่างปฏิบัติของฟังก์ชัน IFNULL
ในส่วนก่อนหน้า เราได้อธิบายพื้นฐานของฟังก์ชัน IFNULL
ในส่วนนี้ เราจะแนะนำตัวอย่างที่เป็นรูปธรรมของการใช้มันกับข้อมูลจริง
3.1 แทนที่ค่าค่า NULL ด้วยค่าพื้นฐาน
หากตารางมีค่าค่า NULL อาจทำให้เกิดพฤติกรรมที่ไม่ตั้งใจ
เพื่อแก้ไขปัญหานี้ คุณสามารถใช้ IFNULL เพื่อแทนที่ NULL ด้วยค่าพื้นฐาน
ตัวอย่าง: หากโบนัสของพนักงานเป็น NULL, ตั้งค่าดีฟอลต์เป็น 0
SELECT name, IFNULL(bonus, 0) AS bonus
FROM employees;
ข้อมูลก่อนดำเนินการ
| name | bonus |
|---|---|
| Sato | 5000 |
| Suzuki | NULL |
| Takahashi | 8000 |
หลังจากใช้ IFNULL
| name | bonus |
|---|---|
| Sato | 5000 |
| Suzuki | 0 |
| Takahashi | 8000 |
การแทนที่ NULL ด้วย 0 ทำให้การรวมข้อมูลและการประมวลผลที่เกี่ยวข้องเป็นไปอย่างราบรื่น.
3.2 หลีกเลี่ยงการคำนวณที่รวม NULL
ใน MySQL, ผลลัพธ์ของการคำนวณที่รวม NULL จะเป็น NULL.
ดังนั้นคุณต้องใช้ IFNULL เพื่อหลีกเลี่ยง NULL.
ตัวอย่าง: คำนวณผลรวมของเงินเดือนและโบนัส
SELECT name, salary, IFNULL(bonus, 0) AS bonus, salary + IFNULL(bonus, 0) AS total_income
FROM employees;
ข้อมูลก่อนดำเนินการ
| name | salary | bonus |
|---|---|---|
| Sato | 300000 | 5000 |
| Suzuki | 280000 | NULL |
| Takahashi | 320000 | 8000 |
หลังจากใช้ IFNULL
| name | salary | bonus | total_income |
|---|---|---|---|
| Sato | 300000 | 5000 | 305000 |
| Suzuki | 280000 | 0 | 280000 |
| Takahashi | 320000 | 8000 | 328000 |
หากโบนัสเป็น NULL, ผลรวม (salary + bonus) จะเป็น NULL ด้วย,
แต่โดยการใช้ IFNULL, MySQL จะถือว่า NULL เป็น 0 และคำนวณได้อย่างถูกต้อง.
3.3 แทนที่ NULL ด้วยสตริงอื่น
คุณสามารถตั้งค่าสตริงค่าเริ่มต้นได้ไม่เฉพาะตัวเลขเท่านั้น แต่ยังเมื่อค่าคือ NULL.
ตัวอย่าง: แสดง “ยังไม่ได้ลงทะเบียน” สำหรับผู้ใช้ที่ไม่มีที่อยู่อีเมล
SELECT id, name, IFNULL(email, 'Not registered') AS email
FROM users;
ข้อมูลก่อนดำเนินการ
| id | name | |
|---|---|---|
| 1 | Sato | satou@example.com |
| 2 | Suzuki | NULL |
| 3 | Takahashi | takahashi@example.com |
หลังจากใช้ IFNULL
| id | name | |
|---|---|---|
| 1 | Sato | satou@example.com |
| 2 | Suzuki | Not registered |
| 3 | Takahashi | takahashi@example.com |
หากปล่อยเป็น NULL, ฟิลด์จะแสดงเป็นช่องว่าง, แต่ IFNULL ทำให้แสดงอย่างชัดเจนด้วย “ยังไม่ได้ลงทะเบียน”.
3.4 ใช้ IFNULL ในเงื่อนไข WHERE
คุณสามารถใช้ IFNULL ในเงื่อนไข WHERE เพื่อกรองตามเงื่อนไขที่รวมค่าที่เป็น NULL.
ตัวอย่าง: ดึงข้อมูลผู้ใช้ที่มีค่า NULL เท่านั้น
SELECT *
FROM users
WHERE IFNULL(email, '') = '';
SQL นี้จะถือว่า email เป็น '' (สตริงว่าง) เมื่อมันเป็น NULL, และดึงข้อมูลผู้ใช้ที่อีเมลเป็น NULL เท่านั้น.
3.5 วางค่า NULL ไว้ท้ายใน ORDER BY
โดยปกติเมื่อใช้ ORDER BY, ค่าที่เป็น NULL อาจปรากฏเป็นอันดับแรก, แต่คุณสามารถใช้ IFNULL เพื่อย้ายไปไว้ท้ายได้.
ตัวอย่าง: วางแถวที่มีค่า NULL ไว้ท้าย
SELECT name, salary
FROM employees
ORDER BY IFNULL(salary, 0) ASC;
4. ความแตกต่างระหว่าง IFNULL กับ COALESCE
MySQL มีฟังก์ชันหลายตัวสำหรับจัดการค่าที่เป็น NULL, และ IFNULL กับ COALESCE มักถูกเปรียบเทียบกัน.
ทั้งสองทำการแทนที่ค่า NULL ด้วยค่าอื่น, แต่การใช้งานและพฤติกรรมจะแตกต่างกัน.
ในส่วนนี้ เราจะอธิบาย ความแตกต่างระหว่าง IFNULL กับ COALESCE และวิธีเลือกใช้ให้เหมาะสม.
4.1 ฟังก์ชัน COALESCE คืออะไร?
ฟังก์ชัน COALESCE จะคืนค่า ค่าที่ไม่เป็น NULL ตัวแรกจากหลายอาร์กิวเมนต์.
กล่าวคือ ในขณะที่ IFNULL เลือกค่าที่ไม่เป็น NULL ระหว่างสองค่า,
COALESCE แตกต่างโดยเลือก ค่าที่ไม่เป็น NULL ตัวแรกจากหลายตัวเลือก.
ไวยากรณ์
COALESCE(expr1, expr2, ... , exprN)
- ประเมินจากซ้ายไปขวา และ คืนค่าที่ไม่เป็น NULL ตัวแรก
- คืนค่า NULL หากอาร์กิวเมนต์ทั้งหมดเป็น NULL
ตัวอย่าง: แทนที่ NULL ด้วย COALESCE
SELECT name, COALESCE(phone, email, 'Not registered') AS contact_info
FROM customers;
ในกรณีนี้ ค่าจะถูกกำหนดดังต่อไปนี้.
- หาก
phoneไม่เป็น NULL, คืนค่าphone. - หาก
phoneเป็น NULL และemailไม่เป็น NULL, คืนค่าemail. - หากทั้ง
phoneและemailเป็น NULL, คืนค่า'Not registered'.
4.2 ความแตกต่างระหว่าง IFNULL กับ COALESCE
| Comparison item | IFNULL | COALESCE |
|---|---|---|
| NULL handling | Returns the fallback value if one expression is NULL | Evaluates multiple expressions and returns the first non-NULL value |
| Number of arguments | Only 2 | 2 or more (multiple allowed) |
| Use case | Simple NULL replacement | NULL handling with priority order |
| Execution speed | Fast (compares only 2 values) | Slightly slower (evaluates multiple values in order) |
4.3 ตัวอย่างการใช้งานจริงของ IFNULL และ COALESCE
ตัวอย่าง 1: การแทนที่ NULL อย่างง่าย
ด้วย IFNULL, คุณสามารถเลือกค่าที่ไม่เป็น NULL ระหว่างสองค่าได้.
SELECT name, IFNULL(phone, 'Not registered') AS contact_info
FROM customers;
ผลลัพธ์
| name | phone | contact_info |
|---|---|---|
| Sato | 080-1234-5678 | 080-1234-5678 |
| Suzuki | NULL | Not registered |
ตัวอย่าง 2: เลือกค่าที่ไม่เป็น NULL ตัวแรกที่มีอยู่
ด้วย COALESCE, คุณสามารถดึงค่าที่ไม่เป็น NULL ตัวแรกได้.
SELECT name, COALESCE(phone, email, 'Not registered') AS contact_info
FROM customers;
ผลลัพธ์
| name | phone | contact_info | |
|---|---|---|---|
| Sato | 080-1234-5678 | satou@example.com | 080-1234-5678 |
| Suzuki | NULL | suzuki@example.com | suzuki@example.com |
| Takahashi | NULL | NULL | Not registered |
- หาก
phoneไม่เป็น NULL ให้คืนค่าphone - หาก
phoneเป็น NULL และemailไม่เป็น NULL ให้คืนค่าemail - หากทั้ง
phoneและemailเป็น NULL ให้คืนค่า'Not registered'
4.4 วิธีเลือกใช้ระหว่าง IFNULL กับ COALESCE
✔ เมื่อใดที่คุณควรใช้ IFNULL
✅ เมื่อคุณต้องการการแทนที่ NULL ด้วยค่าตั้งต้นอย่างง่าย
✅ เมื่อสองอาร์กิวเมนต์เพียงพอ (เช่น แปลง NULL เป็น 0)
✔ เมื่อใดที่คุณควรใช้ COALESCE
✅ เมื่อคุณต้องการหาค่าที่ไม่เป็น NULL ตัวแรก (เช่น phone → email → “Not registered”)
✅ เมื่อคุณต้องการประเมินสามค่าหรือมากกว่า
4.5 การเปรียบเทียบประสิทธิภาพระหว่าง IFNULL กับ COALESCE
โดยทั่วไป, IFNULL ทำงานเร็วกว่า COALESCE.
สาเหตุคือ IFNULL ประเมิน เพียงสองค่า เท่านั้น, ในขณะที่ COALESCE ประเมิน หลายค่าตามลำดับ.
การทดสอบประสิทธิภาพ
เมื่อใช้ IFNULL และ COALESCE กับแถวจำนวน 1 ล้านแถว, คุณอาจเห็นผลลัพธ์เช่นต่อไปนี้.
| Function | Execution time (seconds) |
|---|---|
IFNULL | 0.02 |
COALESCE | 0.05 |
➡ เมื่อข้อมูลมีขนาดใหญ่, IFNULL อาจเร็วกว่าเล็กน้อย.
➡ อย่างไรก็ตาม, หากคุณต้องการ fallback เพียงหนึ่งค่า, ใช้ IFNULL; หากต้องการหลายตัวเลือก, ใช้ COALESCE.

5. ฟังก์ชันการจัดการ NULL ในฐานข้อมูลที่ไม่ใช่ MySQL
MySQL มีฟังก์ชัน IFNULL เพื่อจัดการค่าที่เป็น NULL, แต่ระบบจัดการฐานข้อมูลอื่น (DBMS) ใช้ฟังก์ชันที่แตกต่างกัน.
ในฐานข้อมูลหลักเช่น Oracle, PostgreSQL, และ SQL Server, มักใช้ฟังก์ชันที่ต่างจาก MySQL สำหรับการจัดการ NULL.
ส่วนนี้อธิบาย วิธีที่ค่าที่เป็น NULL ถูกจัดการในฐานข้อมูลที่ไม่ใช่ MySQL.
5.1 การจัดการ NULL ใน Oracle: ฟังก์ชัน NVL
ใน Oracle, มี ฟังก์ชัน NVL ที่เทียบเท่ากับ IFNULL ของ MySQL.
ฟังก์ชัน NVL จะคืนค่าตัวอื่นเมื่อค่าที่ระบุเป็น NULL.
ไวยากรณ์
NVL(expression, fallback_value)
- expression : คอลัมน์หรือค่าที่ต้องตรวจสอบว่าเป็น NULL
- fallback_value : ค่าที่จะคืนเมื่อเป็น NULL (หากไม่เป็น NULL, จะคืนค่า expression ตามเดิม)
ตัวอย่าง
SELECT name, NVL(salary, 0) AS salary
FROM employees;
ผลลัพธ์
| name | salary |
|---|---|
| Sato | 5000 |
| Suzuki | 0 |
| Takahashi | 8000 |
พฤติกรรมของ NVL เกือบเหมือนกับ IFNULL ของ MySQL, ดังนั้นใน Oracle คุณสามารถใช้ NVL ได้โดยตรง.
5.2 การจัดการ NULL ใน PostgreSQL และ SQL Server: ฟังก์ชัน COALESCE
ใน PostgreSQL และ SQL Server, ฟังก์ชัน COALESCE ถูกใช้เพื่อแทนที่ค่าที่เป็น NULL ด้วยค่าทดแทน.
ฟังก์ชันนี้สามารถคืน ค่าที่ไม่เป็น NULL ตัวแรกจากหลายตัวเลือก.
ไวยากรณ์
COALESCE(expr1, expr2, ..., exprN)
- ประเมินจากซ้ายไปขวาและคืนค่าที่ไม่เป็น NULL ตัวแรก
- คืนค่า NULL หากอาร์กิวเมนต์ทั้งหมดเป็น NULL
ตัวอย่าง
SELECT name, COALESCE(phone, email, 'Not registered') AS contact_info
FROM customers;
ผลลัพธ์
| name | phone | contact_info | |
|---|---|---|---|
| Sato | 080-1234-5678 | satou@example.com | 080-1234-5678 |
| Suzuki | NULL | suzuki@example.com | suzuki@example.com |
| Takahashi | NULL | NULL | Not registered |
ตามที่แสดงด้านบน, ใน PostgreSQL และ SQL Server, การใช้ COALESCE ทำให้การจัดการ NULL มีความยืดหยุ่นมากกว่าการใช้ IFNULL ของ MySQL.
5.3 การเปรียบเทียบฟังก์ชันการจัดการ NULL ระหว่างฐานข้อมูลต่าง ๆ
| Database | NULL-handling function | Role |
|---|---|---|
| MySQL | IFNULL(expression, fallback_value) | Convert NULL to a fallback value |
| Oracle | NVL(expression, fallback_value) | Convert NULL to a fallback value (equivalent to IFNULL) |
| PostgreSQL / SQL Server | COALESCE(expr1, expr2, ...) | Return the first non-NULL value |
- การจัดการ NULL อย่างง่าย →
IFNULL(MySQL) หรือNVL(Oracle) - เลือกค่าที่ดีที่สุดจากหลายตัวเลือก →
COALESCE(PostgreSQL, SQL Server)
5.4 หมายเหตุเมื่อย้ายระบบระหว่าง DBMS ต่าง ๆ
เมื่อทำการย้ายระบบระหว่างฐานข้อมูลต่าง ๆ, คุณต้องใส่ใจความแตกต่างของฟังก์ชันการจัดการ NULL.
โดยเฉพาะอย่างยิ่งเมื่อย้ายจาก Oracle ไปยัง MySQL, คุณต้องเขียนใหม่ NVL เป็น IFNULL.
ตัวอย่างการเขียนใหม่ระหว่างการย้าย
- Oracle (NVL)
SELECT NVL(salary, 0) AS salary FROM employees;
- MySQL (IFNULL)
SELECT IFNULL(salary, 0) AS salary FROM employees;
- PostgreSQL / SQL Server (COALESCE)
SELECT COALESCE(salary, 0) AS salary FROM employees;
Also, because COALESCE can accept multiple arguments, it is more flexible than Oracle’s NVL or MySQL’s IFNULL.
During migration, it’s important to choose the correct function for the target database.
6. คำถามที่พบบ่อย (FAQ)
คำถามเกี่ยวกับฟังก์ชัน IFNULL ของ MySQL และการจัดการค่า NULL มีความสำคัญสำหรับนักพัฒนาและผู้ดูแลฐานข้อมูล
ส่วนนี้สรุป คำถามทั่วไปเกี่ยวกับ IFNULL.
คำถามที่ 1. ฟังก์ชัน IFNULL กับฟังก์ชัน NVL เป็นฟังก์ชันเดียวกันหรือไม่?
➡ พวกมันให้ฟังก์ชันการทำงานที่เกือบเหมือนกัน แต่ชื่อฟังก์ชันจะแตกต่างกันตามฐานข้อมูล
| Database | NULL-handling function |
|---|---|
| MySQL | IFNULL(expression, fallback_value) |
| Oracle | NVL(expression, fallback_value) |
| PostgreSQL / SQL Server | COALESCE(expr1, expr2, ...) |
ใน MySQL ให้ใช้ IFNULL; ใน Oracle ให้ใช้ NVL เพื่อแปลงค่าที่เป็น NULL ให้เป็นค่าทดแทน
คำถามที่ 2. ความแตกต่างระหว่าง IFNULL กับ COALESCE คืออะไร?
➡ IFNULL คืนค่าที่ไม่เป็น NULL ระหว่างสองอาร์กิวเมนต์, ส่วน COALESCE คืนค่าที่ไม่เป็น NULL ตัวแรกจากหลายอาร์กิวเมนต์
| Function | Feature |
|---|---|
IFNULL(a, b) | If a is NULL, return b (only two arguments) |
COALESCE(a, b, c, ...) | Evaluates left to right and returns the first non-NULL value |
ตัวอย่าง
SELECT IFNULL(NULL, 'Fallback value'); -- Result: 'Fallback value'
SELECT COALESCE(NULL, NULL, 'First non-NULL value'); -- Result: 'First non-NULL value'
✔ เมื่อควรใช้ IFNULL
✅ คืนค่าตั้งต้นเฉพาะเมื่อเป็น NULL (เช่น หากเป็น NULL แล้วให้เป็น 0)
✅ เมื่อคุณเปรียบเทียบ สองค่า เท่านั้น
✔ เมื่อควรใช้ COALESCE
✅ ดึงค่าที่ไม่เป็น NULL ตัวแรก (เช่น โทรศัพท์ → อีเมล → ค่าตั้งต้น)
✅ เมื่อคุณต้องประเมิน สามค่าขึ้นไป
คำถามที่ 3. IFNULL สามารถใช้กับประเภทข้อมูลอื่นนอกจากตัวเลขได้หรือไม่?
➡ ได้ IFNULL สามารถใช้กับสตริง, วันที่, ตัวเลข และอื่น ๆ
ตัวอย่างที่ 1: การใช้สตริง
SELECT name, IFNULL(email, 'Not registered') AS email
FROM users;
ตัวอย่างที่ 2: การใช้วันที่
SELECT name, IFNULL(last_login, '2000-01-01') AS last_login
FROM users;
อย่างไรก็ตาม การผสมประเภทข้อมูลที่ต่างกัน (เช่น ตัวเลขและสตริง) อาจทำให้เกิดข้อผิดพลาด ดังนั้นควรระมัดระวัง
SELECT IFNULL(100, 'Error'); -- May cause an error due to different data types
คำถามที่ 4. การใช้ IFNULL ทำให้ประสิทธิภาพลดลงหรือไม่?
➡ โดยทั่วไป ผลกระทบต่อประสิทธิภาพจะน้อยมาก แต่เมื่อประมวลผลข้อมูลปริมาณมากอาจมีผล
IFNULLมักจะเร็วเพราะมัน ตรวจสอบแค่สองค่า เท่านั้น- อย่างไรก็ตาม การใช้
IFNULLอย่างหนักบนชุดข้อมูลขนาดใหญ่มาก (หลายล้านแถว) อาจ ส่งผลต่อการปรับแต่งดัชนี ในบางกรณี
🔹 เคล็ดลับการเพิ่มประสิทธิภาพ
- ตั้งค่าดัชนีอย่างเหมาะสม
- คำสั่งเช่น
IFNULL(column, 0) = 100อาจทำให้ดัชนีไม่ถูกใช้ในบางกรณี - วิธีหนึ่งคือการเก็บค่าพร้อมค่าตั้งต้นที่เหมาะสมแทนการใช้ NULL ตั้งแต่ต้น
IFNULLมีน้ำหนักเบากว่าCOALESCE
- เนื่องจาก
COALESCEประเมินหลายค่าเป็นลำดับIFNULLจึงอาจเร็วกว่าในหลายกรณี
คำถามที่ 5. สามารถใช้ CASE แทน IFNULL ได้หรือไม่?
➡ ได้ คุณสามารถทำพฤติกรรมที่คล้ายกันด้วย CASE แต่จะยาวกว่า
ด้วย IFNULL
SELECT name, IFNULL(salary, 0) AS salary
FROM employees;
ด้วย CASE
SELECT name,
CASE WHEN salary IS NULL THEN 0 ELSE salary END AS salary
FROM employees;
✔ IFNULL สั้นและใช้งานง่าย
✔ CASE รองรับเงื่อนไขที่ยืดหยุ่นมากขึ้น (เช่น คุณสามารถรวมเงื่อนไขที่ไม่เป็น NULL ได้ด้วย)
คำถามที่ 6. IFNULL สามารถใช้ในเงื่อนไข WHERE ได้หรือไม่?
➡ ได้ IFNULL สามารถใช้ภายในเงื่อนไข WHERE
ตัวอย่าง: แทนที่ NULL ด้วยค่าที่กำหนดเมื่อทำการค้นหา
SELECT * FROM users WHERE IFNULL(status, 'Not set') = 'Not set';
นี่จะดึงบันทึกที่ status เป็น NULL
สรุป
IFNULLและNVLมีฟังก์ชันการทำงานเกือบเหมือนกัน แต่แตกต่างกันตาม DBMSIFNULLประเมิน 2 ค่า;COALESCEประเมินหลายค่า- ทำงานกับสตริง, วันที่, ตัวเลข, และอื่น ๆ
- สำหรับชุดข้อมูลขนาดใหญ่ ควรพิจารณาการปรับแต่งดัชนี
- คุณสามารถใช้
CASEแทนIFNULL IFNULLยังสามารถใช้ในเงื่อนไขWHERE
7. สรุป
ในบทความนี้ เราได้อธิบายฟังก์ชัน IFNULL ของ MySQL อย่างละเอียด รวมถึงวิธีจัดการค่าที่เป็น NULL, ความแตกต่างจากฟังก์ชันอื่น ๆ, และตัวอย่างการใช้งานจริง
สุดท้าย เราจะสรุปสั้น ๆ ว่าเราได้ครอบคลุมอะไรบ้าง
7.1 ฟังก์ชัน IFNULL คืออะไร?
IFNULLคืนค่าทดแทนเมื่อค่าที่ระบุเป็น NULL- ไวยากรณ์ :
IFNULL(expression, fallback_value)
- ด้วยการหลีกเลี่ยง NULL คุณสามารถป้องกันข้อผิดพลาดในการคำนวณและปัญหาข้อมูลหายได้
7.2 ตัวอย่างการใช้งาน IFNULL อย่างเป็นรูปธรรม
- แทนที่ NULL ด้วยค่าดีฟอลต์ (0 หรือสตริงเฉพาะ)
SELECT name, IFNULL(bonus, 0) AS bonus FROM employees;
- จัดการการคำนวณที่มี NULL อย่างถูกต้อง
SELECT name, salary + IFNULL(bonus, 0) AS total_income FROM employees;
- แปลง NULL ให้เป็นสตริงที่เหมาะสม เช่น “ยังไม่ได้ลงทะเบียน”
SELECT id, IFNULL(email, 'Not registered') AS email FROM users;
- ใช้ในเงื่อนไข
WHEREเพื่อกรองค่าที่เป็น NULLSELECT * FROM users WHERE IFNULL(status, 'Not set') = 'Not set';
7.3 ความแตกต่างระหว่าง IFNULL กับ COALESCE
IFNULLคืนค่าที่ไม่เป็น NULL ระหว่างสองอาร์กิวเมนต์COALESCEคืนค่าที่ไม่เป็น NULL ตัวแรกจากหลายอาร์กิวเมนต์- วิธีเลือกใช้
- การจัดการ NULL อย่างง่าย →
IFNULL - เลือกค่าที่ไม่เป็น NULL ตัวแรก →
COALESCE
7.4 การจัดการ NULL ใน DBMS อื่น ๆ
| Database | NULL-handling function |
|---|---|
| MySQL | IFNULL(expression, fallback_value) |
| Oracle | NVL(expression, fallback_value) |
| PostgreSQL / SQL Server | COALESCE(expr1, expr2, ...) |
NVLของ Oracle มีลักษณะคล้ายกับIFNULLของ MySQL มาก- PostgreSQL และ SQL Server มักใช้
COALESCE - ในระหว่างการย้ายฐานข้อมูล คุณต้องแทนที่ฟังก์ชันให้เหมาะสม
7.5 ประสิทธิภาพและข้อควรระวังของ IFNULL
IFNULLมีน้ำหนักเบากว่าCOALESCE- กับชุดข้อมูลขนาดใหญ่ ประสิทธิภาพอาจลดลงหากการปรับดัชนีได้รับผลกระทบ
- ระวังให้ประเภทข้อมูลสอดคล้องกัน (อย่าผสมประเภทตัวเลขกับสตริง)
7.6 ข้อสรุปสุดท้าย
- ใน MySQL ใช้
IFNULLเพื่อจัดการ NULL อย่างถูกต้อง - คุณสามารถประมวลผลข้อมูลโดยไม่ต้องกังวลกับ NULL
- เข้าใจความแตกต่างระหว่าง
COALESCEและNVLแล้วเลือกใช้ฟังก์ชันที่เหมาะสม - เมื่อย้ายฐานข้อมูลระหว่างระบบ ควรใส่ใจความแตกต่างของฟังก์ชันการจัดการ NULL


