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

MySQL: ความแตกต่างระหว่าง <> NULL และ IS NOT NULL

ปัญหา: <> NULL ไม่ทำงานเหมือน IS NOT NULL

ใน SQL การเปรียบเทียบกับ NULL ด้วยตัวดำเนินการทั่วไป (=, <>, !=, >, <) จะคืนค่า UNKNOWN (NULL) ไม่ใช่ TRUE/FALSE

ตัวอย่างการเปรียบเทียบกับ NULL

mysql> select 10 <> NULL;      -- NULL
mysql> select NULL <> NULL;  -- NULL
mysql> select 'Chris' <> NULL; -- NULL
mysql> select '' <> NULL;    -- NULL

ทั้งหมดคืนค่า NULL (ไม่ใช่ 1 หรือ 0)

ตัวอย่างกับตาราง

mysql> create table DemoTable846(Value int);
mysql> insert into DemoTable846 values(NULL);
mysql> insert into DemoTable846 values(10);

ใช้ IS NOT NULL (ถูกต้อง)

mysql> select * from DemoTable846 where Value IS NOT NULL;
+-------+
| Value |
+-------+
| 10    |
+-------+

ใช้ <> NULL (ผิด - ได้ Empty set)

mysql> select * from DemoTable846 where Value <> NULL;
Empty set (0.00 sec)

เหตุผล

  • NULL แทน "ค่าที่ไม่รู้จัก" การเปรียบเทียบอะไรกับ "ไม่รู้จัก" ก็จะได้ "ไม่รู้จัก"
  • SQL ใช้ 3-valued Logic: TRUE, FALSE, UNKNOWN (NULL)
  • WHERE เก็บเฉพาะแถวที่เป็น TRUE เท่านั้น (UNKNOWN ถูกตัดทิ้ง)

สรุป

ต้องใช้ IS NULL / IS NOT NULL เท่านั้น สำหรับตรวจสอบ NULL อย่าใช้ =, <>, !=, >, < กับ NULL