ใช้เงื่อนไข IS NOT NULL ในคำสั่ง WHERE หรือ INSERT ... SELECT เพื่อกรองเฉพาะแถวที่คอลัมน์ไม่เป็น NULL
Syntax
SELECT * FROM table_name WHERE column_name IS NOT NULL;
ตัวอย่างการใช้งาน
1. สร้างตารางและเพิ่มข้อมูล (มี NULL)
mysql> create table DemoTable1 ( DueDate date ); Query OK, 0 rows affected (0.00 sec)
mysql> insert into DemoTable1 values('2019-09-10'); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1 values(NULL); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1 values('2019-11-10'); Query OK, 1 row affected (0.00 sec)
ข้อมูลทั้งหมด:
mysql> select * from DemoTable1;
+------------+ | DueDate | +------------+ | 2019-09-10 | | NULL | | 2019-11-10 | +------------+ 3 rows in set (0.00 sec)
2. สร้างตารางใหม่และคัดลอกเฉพาะ NOT NULL
mysql> create table DemoTable2 ( AdmissionDate date ); Query OK, 0 rows affected (0.00 sec)
mysql> insert into DemoTable2(AdmissionDate)
-> select DueDate from DemoTable1 where DueDate IS NOT NULL;
Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0
3. ตรวจสอบผลลัพธ์
mysql> select * from DemoTable2;
+---------------+ | AdmissionDate | +---------------+ | 2019-09-10 | | 2019-11-10 | +---------------+ 2 rows in set (0.00 sec)
วิธีอื่นๆ ในการกรอง NOT NULL
| วิธี | Syntax | คำอธิบาย |
|---|---|---|
| WHERE IS NOT NULL | WHERE col IS NOT NULL | มาตรฐาน แนะนำใช้ |
| WHERE <> NULL | WHERE col <> NULL | ผิด - NULL ไม่เทียบได้ด้วย =/<> |
| COALESCE | WHERE COALESCE(col, '') <> '' | แปลง NULL เป็น '' แล้วเปรียบเทียบ |
| IFNULL | WHERE IFNULL(col, '') <> '' | MySQL เฉพาะ |
นับจำนวน NOT NULL
SELECT COUNT(column_name) FROM table_name; -- นับเฉพาะ NOT NULL SELECT COUNT(*) FROM table_name WHERE column_name IS NOT NULL; -- เทียบเท่า
สรุป: ใช้ IS NOT NULL เพื่อกรองเฉพาะค่าที่ไม่เป็น NULL ทั้งใน SELECT, UPDATE, DELETE และ INSERT ... SELECT เป็นมาตรฐาน SQL ที่รองรับในทุก Database