MySQL NULL 值处理

MySQL 教程 · 2019-03-04 20:29:27

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

为了处理这种情况,MySQL提供了三大运算符:

  • IS NULL: 当列的值是 NULL,此运算符返回 true。
  • IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
  • <=>: 比较操作符(不同于=运算符),当比较的的两个值为 NULL 时返回 true。

关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。

在 MySQL 中,NULL 值与任何其它值的比较(即使是 NULL)永远返回 false,即 NULL = NULL 返回false 。

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。

在命令提示符中使用 NULL 值

以下实例中假设数据库 CODERCTO 中的表 codercto_test_tbl 含有两列 codercto_author 和 codercto_count, codercto_count 中设置插入NULL值。

实例

尝试以下实例:

创建数据表 codercto_test_tbl

root@host# mysql -u root -p password; Enter password:******* mysql> use CODERCTO; Database changed mysql> create table codercto_test_tbl -> ( -> codercto_author varchar(40) NOT NULL, -> codercto_count INT -> ); Query OK, 0 rows affected (0.05 sec) mysql> INSERT INTO codercto_test_tbl (codercto_author, codercto_count) values ('CODERCTO', 20); mysql> INSERT INTO codercto_test_tbl (codercto_author, codercto_count) values ('码农教程', NULL); mysql> INSERT INTO codercto_test_tbl (codercto_author, codercto_count) values ('Google', NULL); mysql> INSERT INTO codercto_test_tbl (codercto_author, codercto_count) values ('FK', 20); mysql> SELECT * from codercto_test_tbl; +---------------+--------------+ | codercto_author | codercto_count | +---------------+--------------+ | CODERCTO | 20 | | 码农教程 | NULL | | Google | NULL | | FK | 20 | +---------------+--------------+ 4 rows in set (0.01 sec)

以下实例中你可以看到 = 和 != 运算符是不起作用的:

mysql> SELECT * FROM codercto_test_tbl WHERE codercto_count = NULL; Empty set (0.00 sec) mysql> SELECT * FROM codercto_test_tbl WHERE codercto_count != NULL; Empty set (0.01 sec)

查找数据表中 codercto_test_tbl 列是否为 NULL,必须使用 IS NULLIS NOT NULL,如下实例:

mysql> SELECT * FROM codercto_test_tbl WHERE codercto_count IS NULL; +---------------+--------------+ | codercto_author | codercto_count | +---------------+--------------+ | 码农教程 | NULL | | Google | NULL | +---------------+--------------+ 2 rows in set (0.01 sec) mysql> SELECT * from codercto_test_tbl WHERE codercto_count IS NOT NULL; +---------------+--------------+ | codercto_author | codercto_count | +---------------+--------------+ | CODERCTO | 20 | | FK | 20 | +---------------+--------------+ 2 rows in set (0.01 sec)

使用 PHP 脚本处理 NULL 值

PHP 脚本中你可以在 if...else 语句来处理变量是否为空,并生成相应的条件语句。

以下实例中 PHP 设置了 $codercto_count 变量,然后使用该变量与数据表中的 codercto_count 字段进行比较:

MySQL ORDER BY 测试:

<?php $dbhost = 'localhost:3306'; // 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($codercto_count )) { $sql = "SELECT codercto_author, codercto_count FROM codercto_test_tbl WHERE codercto_count = $codercto_count"; } else { $sql = "SELECT codercto_author, codercto_count FROM codercto_test_tbl WHERE codercto_count IS NULL"; } mysqli_select_db( $conn, 'CODERCTO' ); $retval = mysqli_query( $conn, $sql ); if(! $retval ) { die('无法读取数据: ' . mysqli_error($conn)); } echo '<h2>码农教程 IS NULL 测试<h2>'; echo '<table border="1"><tr><td>作者</td><td>登陆次数</td></tr>'; while($row = mysqli_fetch_array($retval, MYSQL_ASSOC)) { echo "<tr>". "<td>{$row['codercto_author']} </td> ". "<td>{$row['codercto_count']} </td> ". "</tr>"; } echo '</table>'; mysqli_close($conn); ?>

点击查看所有 MySQL 教程 文章: https://codercto.com/courses/l/30.html

查看所有标签

High Performance Python

High Performance Python

Micha Gorelick、Ian Ozsvald / O'Reilly Media / 2014-9-10 / USD 39.99

If you're an experienced Python programmer, High Performance Python will guide you through the various routes of code optimization. You'll learn how to use smarter algorithms and leverage peripheral t......一起来看看 《High Performance Python》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具