การจัดการกับค่า NULL ใน SQL เป็นสิ่งสำคัญมาก เนื่องจาก NULL แทนค่าที่ไม่มีข้อมูลหรือไม่ทราบข้อมูล การจัดการกับ NULL ใน SQL สามารถทำได้หลายรูปแบบ ขึ้นอยู่กับวัตถุประสงค์ที่เราต้องการ
การจัดการกับค่า NULL
การจัดการ NULL ที่สามารถพบได้บ่อยๆ
1. การตรวจสอบค่า NULL ด้วย IS NULL และ IS NOT NULL
ใช้เพื่อกรองข้อมูลที่เป็น NULL หรือไม่เป็น NULL
ตัวอย่าง
SELECT * FROM customers WHERE address IS NULL;คำสั่งนี้จะเลือกข้อมูลจากตาราง customers ที่มีค่า address เป็น NULL
SELECT * FROM customers WHERE address IS NOT NULL;คำสั่งนี้จะเลือกข้อมูลที่ address ไม่ใช่ NULL
2. การแทนค่า NULL ด้วยฟังก์ชัน COALESCE
COALESCE ใช้เพื่อแทนค่า NULL ด้วยค่าอื่น โดยสามารถระบุค่าหลายๆ ค่าไว้และจะเลือกค่าแรกที่ไม่ใช่ NULL
ตัวอย่าง
SELECT customer_id, COALESCE(address, 'No Address') AS address FROM customers;คำสั่งนี้จะแสดง address ของลูกค้า ถ้าข้อมูล address เป็น NULL จะแทนที่ด้วย 'No Address'
3. การใช้ฟังก์ชัน IFNULL
คล้ายกับ COALESCE แต่ใช้ได้เพียงสองค่าเท่านั้น มักใช้กับ MySQL
ตัวอย่าง
SELECT customer_id, IFNULL(phone, 'No Phone') AS phone FROM customers;คำสั่งนี้จะแสดง phone ของลูกค้า ถ้าข้อมูล phone เป็น NULL จะแทนที่ด้วย 'No Phone'
4. การใช้ฟังก์ชัน NVL (ใน Oracle)
ฟังก์ชันนี้ใช้กับ Oracle SQL เพื่อแทนที่ค่า NULL ด้วยค่าที่กำหนด
ตัวอย่าง
SELECT customer_id, NVL(salary, 0) AS salary FROM employees;คำสั่งนี้จะแทนค่าของ salary ที่เป็น NULL ด้วย 0
5. การใช้ฟังก์ชัน NULLIF
NULLIF จะตรวจสอบสองค่า ถ้าค่าทั้งสองเท่ากัน จะคืนค่า NULL แต่ถ้าไม่เท่ากันจะคืนค่าของค่าแรก
ตัวอย่าง
SELECT customer_id, NULLIF(discount, 0) AS discount FROM orders;คำสั่งนี้จะคืนค่า NULL ถ้า discount มีค่าเป็น 0
6. การคำนวณค่า NULL ในการทำ Aggregation Functions
Aggregation Functions เช่น SUM, COUNT, AVG, ฯลฯ จะไม่รวมค่าที่เป็น NULL ในการคำนวณ
ตัวอย่าง
SELECT SUM(salary) AS total_salary FROM employees;คำสั่งนี้จะคำนวณรวมเฉพาะ salary ที่ไม่ใช่ NULL
แต่ถ้าอยากนับค่าที่เป็น NULL สามารถใช้ COUNT(*) แทนได้ ดังตัวอย่าง
SELECT COUNT(*) AS total_employees FROM employees;คำสั่งนี้จะนับทุกแถวรวมทั้งแถวที่มี NULL
7. การใช้ CASE WHEN เพื่อจัดการกับ NULL
สามารถใช้ CASE WHEN ตรวจสอบค่า NULL และคืนค่าที่กำหนดได้
ตัวอย่าง
SELECT employee_id,
CASE
WHEN salary IS NULL THEN 'No Salary'
ELSE salary
END AS salary_info
FROM employees;คำสั่งนี้จะตรวจสอบว่า salary เป็น NULL หรือไม่ ถ้าใช่จะแสดงว่า “No Salary” แต่ถ้าไม่ใช่จะแสดงค่า salary
8. การจัดการกับ NULL ในเงื่อนไขการเปรียบเทียบ
ค่าที่เป็น NULL ไม่สามารถใช้การเปรียบเทียบเช่น =, <, > ได้ การเปรียบเทียบจะให้ผลลัพธ์เป็น NULL
ตัวอย่าง
SELECT * FROM employees WHERE salary > 50000; -- ไม่รวมค่าที่ salary เป็น NULLคำสั่งนี้จะไม่เลือกแถวที่ salary เป็น NULL แม้ว่าจะไม่เขียน IS NOT NULL เพราะ NULL ไม่สามารถนำไปเปรียบเทียบได้
สรุป
การจัดการกับค่า NULL ใน SQL มีความหลากหลายและสามารถนำมาประยุกต์ใช้ได้หลายรูปแบบตามความต้องการ เช่น การตรวจสอบ การแทนที่ค่า การใช้ใน Aggregation Functions การใช้ในเงื่อนไขต่าง ๆ ซึ่งช่วยให้การจัดการข้อมูลในฐานข้อมูลมีประสิทธิภาพและครบถ้วนมากขึ้น
