我们已经知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作。

10年积累的成都网站建设、做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有东山免费网站建设让你可以放心的选择与我们合作。
为了处理这种情况,MySQL提供了三大运算符:
关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。
在 MySQL 中,NULL 值与任何其它值的比较(即使是 NULL)永远返回 NULL,即 NULL = NULL 返回 NULL 。
MySQL 中处理 NULL 使用 IS NULL 和 IS NOT NULL 运算符。
注意:
select * , columnName1+ifnull(columnName2,0) from tableName;columnName1,columnName2 为 int 型,当 columnName2 中,有值为 null 时,columnName1+columnName2=null, ifnull(columnName2,0) 把 columnName2 中 null 值转为 0。
以下实例中假设数据库 RUNOOB 中的表 runoob_test_tbl 含有两列 runoob_author 和 runoob_count, runoob_count 中设置插入NULL值。
尝试以下实例:
root
@
host
# mysql -u root -p password;
 
Enter
 
password
:******* 
mysql
> 
use
 
RUNOOB
; 
Database
 
changed
 
mysql
> 
create
 
table
 
runoob_test_tbl
 -> 
(
 -> 
runoob_author
 
varchar
(
40
)
 
NOT
 
NULL
, -> 
runoob_count
 
INT
 -> 
)
; 
Query
 
OK
, 
0
 
rows
 
affected
 
(
0.05
 
sec
)
 
mysql
> 
INSERT
 
INTO
 
runoob_test_tbl
 
(
runoob_author
, 
runoob_count
)
 
values
 
(
'
RUNOOB
'
, 
20
)
; 
mysql
> 
INSERT
 
INTO
 
runoob_test_tbl
 
(
runoob_author
, 
runoob_count
)
 
values
 
(
'
菜鸟教程
'
, 
NULL
)
; 
mysql
> 
INSERT
 
INTO
 
runoob_test_tbl
 
(
runoob_author
, 
runoob_count
)
 
values
 
(
'
Google
'
, 
NULL
)
; 
mysql
> 
INSERT
 
INTO
 
runoob_test_tbl
 
(
runoob_author
, 
runoob_count
)
 
values
 
(
'
FK
'
, 
20
)
; 
mysql
> 
SELECT
 * 
from
 
runoob_test_tbl
; +---------------+--------------+ | 
runoob_author
 | 
runoob_count
 | +---------------+--------------+ | 
RUNOOB
 | 
20
 | | 菜鸟教程 | 
NULL
 | | 
Google
 | 
NULL
 | | 
FK
 | 
20
 | +---------------+--------------+ 
4
 
rows
 
in
 
set
 
(
0.01
 
sec
)    
以下实例中你可以看到 = 和 != 运算符是不起作用的:
mysql
> 
SELECT
 * 
FROM
 
runoob_test_tbl
 
WHERE
 
runoob_count
 = 
NULL
; 
Empty
 
set
 
(
0.00
 
sec
)
 
mysql
> 
SELECT
 * 
FROM
 
runoob_test_tbl
 
WHERE
 
runoob_count
 != 
NULL
; 
Empty
 
set
 
(
0.01
 
sec
)    
查找数据表中 runoob_test_tbl 列是否为 NULL,必须使用 IS NULL 和 IS NOT NULL,如下实例:
mysql
> 
SELECT
 * 
FROM
 
runoob_test_tbl
 
WHERE
 
runoob_count
 
IS
 
NULL
; +---------------+--------------+ | 
runoob_author
 | 
runoob_count
 | +---------------+--------------+ | 菜鸟教程 | 
NULL
 | | 
Google
 | 
NULL
 | +---------------+--------------+ 
2
 
rows
 
in
 
set
 
(
0.01
 
sec
)
 
mysql
> 
SELECT
 * 
from
 
runoob_test_tbl
 
WHERE
 
runoob_count
 
IS
 
NOT
 
NULL
; +---------------+--------------+ | 
runoob_author
 | 
runoob_count
 | +---------------+--------------+ | 
RUNOOB
 | 
20
 | | 
FK
 | 
20
 | +---------------+--------------+ 
2
 
rows
 
in
 
set
 
(
0.01
 
sec
)    
PHP 脚本中你可以在 if...else 语句来处理变量是否为空,并生成相应的条件语句。
以下实例中 PHP 设置了 $runoob_count 变量,然后使用该变量与数据表中的 runoob_count 字段进行比较:
 
$dbhost
 = 
'
localhost
'
; 
//
 mysql服务器主机地址
 
$dbuser
 = 
'
root
'
; 
//
 mysql用户名
 
$dbpass
 = 
'
123456
'
; 
//
 mysql用户名密码
 
$conn
 = 
mysqli_connect
(
$dbhost
, 
$dbuser
, 
$dbpass
)
; 
if
(
! 
$conn
 
)
 
{
 
die
(
'
连接失败: 
'
 . 
mysqli_error
(
$conn
)
)
; 
}
 
//
 设置编码,防止中文乱码
 
mysqli_query
(
$conn
 , 
"
set names utf8
"
)
; 
if
(
 
isset
(
$runoob_count
 
)
)
 
{
 
$sql
 = 
"
SELECT runoob_author, runoob_count FROM runoob_test_tbl WHERE runoob_count = 
$runoob_count
"
; 
}
 
else
 
{
 
$sql
 = 
"
SELECT runoob_author, runoob_count FROM runoob_test_tbl WHERE runoob_count IS NULL
"
; 
}
 
mysqli_select_db
(
 
$conn
, 
'
RUNOOB
'
 
)
; 
$retval
 = 
mysqli_query
(
 
$conn
, 
$sql
 
)
; 
if
(
! 
$retval
 
)
 
{
 
die
(
'
无法读取数据: 
'
 . 
mysqli_error
(
$conn
)
)
; 
}
 
echo
 
'
| 作者 | 登陆次数 | 
{$row['runoob_author']}  |  {$row['runoob_count']}  |  
输出结果如下图所示: