ใช้ IS NOT NULL ในเงื่อนไข WHERE เพื่อกรองเฉพาะแถวที่คอลัมน์มีค่า (ไม่ใช่ NULL)
ตัวอย่างการใช้งาน
1. สร้างตาราง
mysql> CREATE TABLE DemoTable1792 (
Name VARCHAR(20)
);
Query OK, 0 rows affected (0.00 sec)
2. เพิ่มข้อมูล (มี NULL)
mysql> INSERT INTO DemoTable1792 VALUES('John Smith');
mysql> INSERT INTO DemoTable1792 VALUES(NULL);
mysql> INSERT INTO DemoTable1792 VALUES('David Miller');
mysql> INSERT INTO DemoTable1792 VALUES(NULL);
3. แสดงข้อมูลทั้งหมด (รวม NULL)
mysql> SELECT * FROM DemoTable1792; +--------------+ | Name | +--------------+ | John Smith | | NULL | | David Miller | | NULL | +--------------+
4. Query: เฉพาะ NOT NULL
mysql> SELECT * FROM DemoTable1792 WHERE Name IS NOT NULL;
5. ผลลัพธ์
+--------------+ | Name | +--------------+ | John Smith | | David Miller | +--------------+
❌ ผิด: ใช้ = NULL หรือ != NULL
-- ผลลัพธ์จะว่างเปล่าหรือผิดปกติ SELECT * FROM DemoTable1792 WHERE Name = NULL; -- ❌ ไม่ทำงาน SELECT * FROM DemoTable1792 WHERE Name != NULL; -- ❌ ไม่ทำงาน SELECT * FROM DemoTable1792 WHERE Name <> NULL; -- ❌ ไม่ทำงาน
เหตุผล: ใน SQL, NULL = NULL คือ UNKNOWN ไม่ใช่ TRUE ดังนั้น WHERE UNKNOWN จะไม่คืนแถวใดๆ
✅ ถูกต้อง: ใช้ IS NULL / IS NOT NULL
SELECT * FROM DemoTable1792 WHERE Name IS NULL; -- หาเฉพาะ NULL SELECT * FROM DemoTable1792 WHERE Name IS NOT NULL; -- หาเฉพาะ NOT NULL
Null-safe Equal Operator (<=>)
SELECT * FROM DemoTable1792 WHERE Name <=> NULL; -- เทียบเท่า IS NULL SELECT * FROM DemoTable1792 WHERE Name <=> 'John'; -- เปรียบเทียบปลอดภัย NULL
สรุป
ใช้ IS NOT NULL เพื่อกรองข้อมูลที่มีค่า (Non-NULL) และ IS NULL เพื่อหาข้อมูลที่เป็น NULL อย่าใช้ = NULL หรือ != NULL เพราะจะไม่ทำงานตามที่คาดหวัง