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

การ SELECT ข้อมูลที่มีค่า NULL ใน MySQL

ใน MySQL การเปรียบเทียบค่า NULL ด้วยออเปอเรเตอร์ทั่วไป (=, !=, <>) จะคืนค่า UNKNOWN (ไม่ใช่ TRUE/FALSE) ทำให้ไม่ได้ผล ต้องใช้ IS NULL หรือ IS NOT NULL แทน

ตัวอย่างการใช้งาน

สร้างตารางและเพิ่มข้อมูล (มี NULL และ Empty String):

mysql> CREATE TABLE DemoTable1455 (Name VARCHAR(20));
mysql> INSERT INTO DemoTable1455 VALUES ('John');
mysql> INSERT INTO DemoTable1455 VALUES (NULL);
mysql> INSERT INTO DemoTable1455 VALUES ('');

ดูข้อมูล:

mysql> SELECT * FROM DemoTable1455;
+------+
| Name |
+------+
| John |
| NULL |
|      |
+------+

ค้นหาที่ไม่ใช่ 'John' หรือ เป็น NULL:

mysql> SELECT * FROM DemoTable1455 WHERE Name <> 'John' OR Name IS NULL;

ผลลัพธ์ (เจอ NULL และ Empty String):

+------+
| Name |
+------+
| NULL |
|      |
+------+

ความแตกต่าง NULL vs Empty String

ค่าความหมายตรวจสอบด้วย
NULLไม่มีค่า / ไม่ทราบค่าIS NULL / IS NOT NULL
'' (Empty String)สตริงว่าง (มีค่า แต่อย่างว่าง)= '' / <> ''
' ' (Space)สตริงช่องว่าง= ' ' / TRIM() = ''

ฟังก์ชันจัดการ NULL

ฟังก์ชันคำอธิบายตัวอย่าง
IS NULLเช็คเป็น NULLWHERE col IS NULL
IS NOT NULLเช็คไม่เป็น NULLWHERE col IS NOT NULL
IFNULL(expr, val)คืนค่า val หาก expr เป็น NULLIFNULL(phone, 'N/A')
COALESCE(v1, v2, ...)คืนค่าแรกที่ไม่เป็น NULLCOALESCE(mobile, home, 'N/A')
NULLIF(expr1, expr2)คืน NULL หาก expr1 = expr2NULLIF(end_date, start_date)

แนวทางปฏิบัติที่ดี

  • ใช้ IS NULL / IS NOT NULL เสมอสำหรับเช็ค NULL
  • หลีกเลี่ยง col = NULL หรือ col <> NULL (จะไม่ทำงาน)
  • ใช้ COALESCE() แทน IFNULL() เพื่อความยืดหยุ่น (มาตรฐาน SQL)
  • กำหนด DEFAULT NULL หรือ NOT NULL ตอนสร้างตารางให้ชัดเจน
  • พิจารณา SET sql_mode = 'STRICT_TRANS_TABLES' เพื่อจับ Error ตอน INSERT NULL ลง NOT NULL