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

การข้ามค่า NULL และแสดงเฉพาะค่าที่มีข้อมูลใน MySQL

เมื่อต้องการดึงเฉพาะแถวที่คอลัมน์มีค่า (ไม่เป็น 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คำอธิบาย
NULLTRUEUNKNOWNUNKNOWNไม่มีค่า
'' (Empty)FALSETRUEUNKNOWNสตริงว่าง
0FALSEUNKNOWNTRUEตัวเลขศูนย์

ฟังก์ชันจัดการ 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 (ไม่ทำงาน)