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

MySQL SELECT เฉพาะข้อมูลที่ NOT NULL ด้วย IS NOT NULL

ใช้ 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 เพราะจะไม่ทำงานตามที่คาดหวัง