扫码一下
查看教程更方便
我们已经知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作。
为了处理这种情况,MySQL提供了三大运算符:
关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。
在 MySQL 中,NULL 值与任何其它值的比较(即使是 NULL)永远返回 NULL,即 NULL = NULL 返回 NULL 。
MySQL 中处理 NULL 使用 IS NULL 和 IS NOT NULL 运算符。
以下示例中使用在前面章节中在数据库 JIYIK 中的表 tcount_tbl ,该表含有两列 jiyik_author 和 jiyik_count, jiyik_count 中设置插入NULL值。
mysql> INSERT INTO tcount_tbl (jiyik_author, jiyik_count) values ('onmpw', NULL);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO tcount_tbl (jiyik_author, jiyik_count) values ('jiyik', NULL);
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM tcount_tbl;
+--------------+-------------+
| jiyik_author | jiyik_count |
+--------------+-------------+
| 迹忆客 | 10 |
| jiyik.com | 20 |
| Google | 22 |
| onmpw | NULL |
| jiyik | NULL |
+--------------+-------------+
5 rows in set (0.00 sec)
以下示例中你可以看到 = 和 != 运算符是不起作用的:
mysql> SELECT * FROM tcount_tbl WHERE jiyik_count = NULL;
Empty set (0.00 sec)
mysql> SELECT * FROM tcount_tbl WHERE jiyik_count != NULL;
Empty set (0.01 sec)
查找数据表中 tcount_tbl 列是否为 NULL,必须使用 IS NULL 和 IS NOT NULL,如下所示:
mysql> SELECT * FROM tcount_tbl WHERE jiyik_count IS NULL;
+--------------+-------------+
| jiyik_author | jiyik_count |
+--------------+-------------+
| onmpw | NULL |
| jiyik | NULL |
+--------------+-------------+
2 rows in set (0.01 sec)
mysql> SELECT * FROM tcount_tbl WHERE jiyik_count IS NOT NULL;
+--------------+-------------+
| jiyik_author | jiyik_count |
+--------------+-------------+
| 迹忆客 | 10 |
| jiyik.com | 20 |
| Google | 22 |
+--------------+-------------+
3 rows in set (0.00 sec)
PHP 脚本中你可以在 if...else 语句来处理变量是否为空,并生成相应的条件语句。
以下实例中 PHP 设置了 $jiyik_count 变量,然后使用该变量与数据表中的 jiyik_count 字段进行比较:
<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '123456';
$dbname = 'JIYIK';
$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
$jiyik_count = null;
if($mysqli->connect_errno ) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
printf("Connected successfully.\n");
if(isset($jiyik_count )) {
$sql = "SELECT jiyik_author, jiyik_count FROM tcount_tbl WHERE jiyik_count = {$jiyik_count}";
} else {
$sql = 'SELECT jiyik_author, jiyik_count FROM tcount_tbl WHERE jiyik_count IS NULL';
}
$result = $mysqli->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
printf("Author: %s, Count: %d \n",
$row["jiyik_author"],
$row["jiyik_count"]);
}
} else {
printf("No record found.\n");
}
$mysqli->close();
?>
结果如下:
Connected successfully.
Author: onmpw, Count: 0
Author: jiyik, Count: 0