เมื่อต้องการดึงเฉพาะแถวที่คอลัมน์มีค่า (ไม่เป็น NULL) ใช้เงื่อนไข IS NOT NULL ใน WHERE Clause ซึ่งเป็นวิธีมาตรฐานและถูกต้องที่สุดสำหรับการเช็ค NULL
ตัวอย่างการใช้งาน
สร้างตารางคะแนนนักเรียน (มี NULL):
mysql> CREATE TABLE DemoTable1458 (
-> StudentName VARCHAR(20),
-> StudentScore INT
-> );
เพิ่มข้อมูล:
mysql> INSERT INTO DemoTable1458 VALUES ('Chris Brown', 56);
mysql> INSERT INTO DemoTable1458 VALUES ('David Miller', NULL);
mysql> INSERT INTO DemoTable1458 VALUES ('John Doe', 78);
mysql> INSERT INTO DemoTable1458 VALUES ('Adam Smith', NULL);
ดูข้อมูลทั้งหมด:
mysql> SELECT * FROM DemoTable1458; +--------------+--------------+ | StudentName | StudentScore | +--------------+--------------+ | Chris Brown | 56 | | David Miller | NULL | | John Doe | 78 | | Adam Smith | NULL | +--------------+--------------+
กรองเฉพาะแถวที่มีคะแนน (NOT NULL):
mysql> SELECT StudentName, StudentScore FROM DemoTable1458
-> WHERE StudentScore IS NOT NULL;
ผลลัพธ์ (เหลือ 2 แถว):
+-------------+--------------+ | StudentName | StudentScore | +-------------+--------------+ | Chris Brown | 56 | | John Doe | 78 | +-------------+--------------+
NULL vs Empty String vs Zero
| ค่า | IS NULL | = '' | = 0 | คำอธิบาย |
|---|---|---|---|---|
| NULL | TRUE | UNKNOWN | UNKNOWN | ไม่มีค่า |
| '' (Empty) | FALSE | TRUE | UNKNOWN | สตริงว่าง |
| 0 | FALSE | UNKNOWN | TRUE | ตัวเลขศูนย์ |
ฟังก์ชันจัดการ NULL (สำหรับ SELECT ไม่ใช่ WHERE)
-- แสดงค่าแทน NULL SELECT StudentName, IFNULL(StudentScore, 0) AS Score FROM DemoTable1458; -- ผลลัพธ์: Chris=56, David=0, John=78, Adam=0 SELECT StudentName, COALESCE(StudentScore, 'N/A') AS Score FROM DemoTable1458; -- ผลลัพธ์: Chris=56, David=N/A, John=78, Adam=N/A
แนวทางปฏิบัติที่ดี
- ใช้ IS NOT NULL ใน WHERE สำหรับกรอง
- ใช้ COALESCE/IFNULL ใน SELECT สำหรับแสดงผล
- กำหนด
NOT NULL DEFAULT 0ตอนสร้างตาราง หากค่าว่างหมายถึง 0 - หลีกเลี่ยง
WHERE col != NULLหรือWHERE col = NULL(ไม่ทำงาน)