COALESCE ISNULL และ IFNULL

ทั้งสามฟังก์ชั่นเป็นฟังก์ชั่นสำหรับตรวจสอบค่า NULL ในฐานข้อมูล MySQL
COALESCE(val1, val2, ...., val_n)

คืนค่าข้อมูลรายการแรกที่ไม่ใช่ NULL
IFNULL(expression, alt_value)

ฟังก์ชั่น คืนค่า alt_value หาก expression เป็น NULL หาก expression ไม่ใช่ NULL คืนค่า expression
ISNULL(expression)

ฟังก์ชั่นทดสอบ expression ว่าเป็น NULL หรือไม่ คืนค่า 1 ถ้าเป็น NULL ถ้าไม่ใช่คืนค่า 0

ความแตกต่างระหว่าง IFNULL และ COALESCE
  • IFNULL จะคืนค่าผลลัพท์จากพารามิเตอร์ที่สอง หากพารามิเตอร์แรกเป็น NULL ในขณะที่ COALESCE จะคืนค่าข้อมูลจากพารามิเตอร์ถัดไป ที่ไม่ใช่ NULL กลับมา
  • IFNULL จะรับพารามิเตอร์ ได้แค่เพียง 2 ตัว ในขณะที่ COALESCE สามารถรับค่า พารามิเตอร์ ได้มากกว่า โดยจะคืนค่าพารามิเตอร์ตัวแรกสุดที่ไม่เป็น NULL
  • ทั้ง IFNULL และ COALESCE จะคืนค่าชนิดข้อมูลอิงตามพารามิเตอร์ตัวแรกโดยคำนึงถึง ลำดับความสำคัญของชนิดของข้อมูล SQL
  • สำหรับ SQL Server ใช้ ISNULL แทน IFNULL
สรุปสุดท้าย IFNULL จะเร็วกว่า COALESCE

ตัวอย่างการใช้งาน
SELECT COALESCE(`hourly_wage` * 40 * 52, `salary`, `commission` * `num_sales`) AS `money` FROM `table_demo`

ผลลัพท์การคำนวณจำนวนเงินจากตารางด้านบน
SELECT 1+IFNULL(MAX(`id`), 0) AS `id` FROM `table_demo`

ผลลัพท์เป็นการหาค่า id ถัดไปจากตารางด้านบน (id นี้เป็นคนละตัวกันกับค่าที่ได้จาก auto_increment นะครับ)
ตัวอย่างนี้สามารถเขียนได้อีกแบบโดยใช้ COALESCE ซึ่งจะให้ผลลัพท์เหมือนกัน
SELECT 1+COALESCE(MAX(`id`), 0) AS `id` FROM `table_demo`


ทั้ง IFNULL และ COALESCE จะพยายามคืนค่าข้อมูลตามชนิดของข้อมูลในพารามิเตอร์แรก ตามกฏ ลำดับความสำคัญของชนิดของข้อมูล SQL
ตัวอย่างด้านล่าง price เป็นชนิด DECIMAL(10,2)
SELECT COALESCE(SUM(price), 0) FROM app_stock  WHERE price<0

ผลลัพท์ 0.00 คืนค่าเป็น Decimal
SELECT COALESCE(SUM(price), '0') FROM app_stock  WHERE price<0

ผลลัพท์ 0 คืนค่าเป็น String
ผู้เขียน goragod โพสต์เมื่อ 22 ก.พ. 2559 เปิดดู 23,356 ป้ายกำกับ SQL
^