首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 入門

MySQL NULL 值處理全攻略:IS NULL、IS NOT NULL 與 <=> 操作符深度解析

     編輯:MySQL 入門

MySQL NULL 值處理全攻略:IS NULL、IS NOT NULL 與 <=> 操作符深度解析

在 SQL 查詢中,NULL 代表「未知」或「不存在」,而非零值或空字串。這一特性導致 NULL 與任何值(包括 NULL 本身)進行比較,結果永遠為 false。因此,WHERE column = NULL 或 WHERE column != NULL 永遠不會返回任何資料列——這是新手最常踩的坑。

MySQL 提供的三大 NULL 專用操作符

操作符 用途與回傳值
IS NULL欄位值為 NULL 時回傳 TRUE
IS NOT NULL欄位值不為 NULL 時回傳 TRUE
<=>安全比較操作符(NULL-safe equal)。兩側皆為 NULL 時回傳 TRUE,否則等同於 =

命令列實戰演示:tcount_tbl 表

建立測試表並插入包含 NULL 的資料:

mysql> CREATE TABLE tcount_tbl (
    -> runoob_author VARCHAR(40) NOT NULL,
    -> runoob_count INT
    -> );
mysql> INSERT INTO tcount_tbl VALUES ('mahran', 20), ('mahnaz', NULL), ('Jen', NULL), ('Gill', 20);

錯誤示範:使用 = / != 比較 NULL

mysql> SELECT * FROM tcount_tbl WHERE runoob_count = NULL;
Empty set (0.00 sec)

mysql> SELECT * FROM tcount_tbl WHERE runoob_count != NULL;
Empty set (0.01 sec)

正確寫法:IS NULL / IS NOT NULL

mysql> SELECT * FROM tcount_tbl WHERE runoob_count IS NULL;
+-----------------+----------------+
| runoob_author | runoob_count |
+-----------------+----------------+
| mahnaz | NULL |
| Jen | NULL |
+-----------------+----------------+

mysql> SELECT * FROM tcount_tbl WHERE runoob_count IS NOT NULL;
+-----------------+----------------+
| runoob_author | runoob_count |
+-----------------+----------------+
| mahran | 20 |
| Gill | 20 |
+-----------------+----------------+

進階用法:<=> 安全比較

mysql> SELECT * FROM tcount_tbl WHERE runoob_count <=> NULL;
-- 等同於 IS NULL,回傳 mahnaz、Jen 兩筆資料

mysql> SELECT * FROM tcount_tbl WHERE runoob_count <=> 20;
-- 回傳 mahran、Gill 兩筆資料

PHP 腳本中處理 NULL 的正確模式

在 PHP 中切勿直接將變數插入 SQL 字串比較 NULL,應先判斷變數是否為 null,再動態組裝 IS NULL 或 = ? 條件,並使用預處理語句防止注入:

<?php
$count = $_POST['runoob_count'] ?? null;
$sql = "SELECT runoob_author, runoob_count FROM tcount_tbl WHERE ";
$params = [];
$types = '';

if ($count === null) {
    $sql .= "runoob_count IS NULL";
} else {
    $sql .= "runoob_count = ?";
    $params[] = $count;
    $types .= 'i';
}
// 使用 mysqli 預處理執行...
?>

核心心法總結

  1. 永遠不要 使用 = NULL、!= NULL、<> NULL。
  2. 查找 NULL 用 IS NULL,排除 NULL 用 IS NOT NULL。
  3. 需要「NULL 等於 NULL」語義時,使用 <=>。
  4. 應用層(PHP/Java/Go)與資料庫層的 NULL 語義保持一致,避免雙重標準導致 Bug。

掌握這三大操作符,即可從容應對所有 NULL 相關查詢場景,告別「明明有資料卻查不出來」的困擾。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved