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

MySQL: COALESCE เรียงลำดับค่า NULL และ NON-NULL อย่างไร


คำอธิบาย

COALESCE() คืนค่า NON-NULL แรก จากรายการอาร์กิวเมนต์ (ซ้ายไปขวา) หากทุกค่าเป็น NULL คืน NULL

ขั้นตอนการสร้างตารางและข้อมูลตัวอย่าง

mysql> create table DemoTable ( 
    Number1 int, 
    Number2 int ); 
Query OK, 0 rows affected (5.48 sec)

การเพิ่มข้อมูล

mysql> insert into DemoTable values(100, 200); 
Query OK, 1 row affected (0.40 sec)
mysql> insert into DemoTable values(NULL, 50); 
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(10, NULL); 
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(NULL, NULL); 
Query OK, 1 row affected (0.08 sec)

แสดงข้อมูลทั้งหมด

mysql> select * from DemoTable;

ผลลัพธ์:

+---------+---------+
| Number1 | Number2 |
+---------+---------+
| 100     | 200     |
| NULL    | 50      |
| 10      | NULL    |
| NULL    | NULL    |
+---------+---------+
4 rows in set (0.00 sec)

คิวรี่ COALESCE(Number1, Number2)

mysql> select coalesce(Number1, Number2) AS NON_NULL_ARGUMENT_FIRST 
from DemoTable;

ผลลัพธ์

+-------------------------+
| NON_NULL_ARGUMENT_FIRST |
+-------------------------+
| 100                     |
| 50                      |
| 10                      |
| NULL                    |
+-------------------------+
4 rows in set (0.00 sec)

คำอธิบายแต่ละแถว

Number1Number2COALESCEเหตุผล
100200100Number1 ไม่เป็น NULL → เอา Number1
NULL5050Number1 เป็น NULL → ไป Number2 → 50
10NULL10Number1 ไม่เป็น NULL → เอา Number1
NULLNULLNULLทั้งคู่เป็น NULL → คืน NULL

การประยุกต์ใช้

  • แสดงค่า Default เมื่อคอลัมน์เป็น NULL: COALESCE(phone, email, 'N/A')
  • คำนวณค่าที่อาจเป็น NULL: COALESCE(discount, 0) * price
  • เรียงลำดับ NULL ไปท้าย: ORDER BY COALESCE(sort_order, 9999)

COALESCE vs IFNULL

  • COALESCE: มาตรฐาน ANSI SQL, รับอาร์กิวเมนต์ได้มากกว่า 2 ตัว
  • IFNULL: MySQL Specific, รับแค่ 2 ตัว
  • แนะนำใช้ COALESCE สำหรับ Portability