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

MySQL: ตรวจสอบ NULL หรือ NOT NULL ในคอลัมน์ด้วย IS NOT NULL

การตรวจสอบค่า NULL / NOT NULL ใน MySQL

ใช้ IS NULL และ IS NOT NULL — ไม่ใช่ = NULL หรือ != NULL (เพราะ NULL ไม่เท่ากับอะไรเลย รวมถึงตัวมันเอง)

ไวยากรณ์

SELECT column_name IS NOT NULL FROM table_name;
-- คืน 1 = NOT NULL, 0 = NULL

สร้างตารางและข้อมูล

mysql> create table DemoTable1408 (
    -> FirstName varchar(30)
    -> );
Query OK, 0 rows affected (0.54 sec)

mysql> insert into DemoTable1408 values('Chris');
mysql> insert into DemoTable1408 values('');      -- Empty string (ไม่ใช่ NULL)
mysql> insert into DemoTable1408 values(NULL);    -- NULL จริง
mysql> insert into DemoTable1408 values('David');

ข้อมูลในตาราง

+-----------+
| FirstName |
+-----------+
| Chris     |
|           |  -- empty string
| NULL      |  -- NULL
| David     |
+-----------+

คำสั่งตรวจสอบ IS NOT NULL

mysql> select FirstName IS NOT NULL from DemoTable1408;

ผลลัพธ์

+-----------------------+
| FirstName IS NOT NULL |
+-----------------------+
| 1                     |  -- Chris
| 1                     |  -- empty string (ไม่ใช่ NULL)
| 0                     |  -- NULL
| 1                     |  -- David
+-----------------------+

ความแตกต่าง: Empty String vs NULL

  • '' (empty string) — เป็นค่าที่มีอยู่จริง ไม่ใช่ NULL → IS NOT NULL = 1
  • NULL — ไม่มีค่า → IS NOT NULL = 0
  • ใช้ LENGTH(col) = 0 หรือ col = '' ตรวจ empty string

การใช้งานใน WHERE clause

-- หาแถวที่มีค่า
WHERE FirstName IS NOT NULL

-- หาแถวที่เป็น NULL
WHERE FirstName IS NULL

-- หาแถวที่มีค่า และไม่ใช่ empty string
WHERE FirstName IS NOT NULL AND FirstName != ''
-- หรือ
WHERE TRIM(FirstName) != ''

ฟังก์ชันช่วยเหลือ

Best Practice: กำหนด NOT NULL constraint ตอนสร้างตารางหากคอลัมน์ไม่ควรเป็น NULL — ป้องกัน bug และช่วย optimizer

ฟังก์ชันคำอธิบาย
IFNULL(col, 'default')คืน 'default' หาก col เป็น NULL
COALESCE(col1, col2, 'default')คืนค่าแรกที่ไม่ใช่ NULL
NULLIF(col, '')คืน NULL หาก col = '' (empty string)
ISNULL(col)เทียบเท่า IS NULL (คืน 1/0)