当前位置:网站首页>15、学习MySQL NULL 值处理
15、学习MySQL NULL 值处理
2022-08-03 17:59:00 【微服务 spring cloud】
MySQL NULL 值处理
我们已经知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作。
为了处理这种情况,MySQL提供了三大运算符:
- IS NULL: 当列的值是 NULL,此运算符返回 true。
- IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
- <=>: 比较操作符(不同于 = 运算符),当比较的的两个值相等或者都为 NULL 时返回 true。
关于 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。
在命令提示符中使用 NULL 值
以下实例中假设数据库 XXXXXX 中的表 xxxxxx_test_tbl 含有两列 xxxxxx_author 和 xxxxxx_count, xxxxxx_count 中设置插入NULL值。
实例
尝试以下实例:
创建数据表 xxxxxx_test_tbl
[email protected]# mysql -u root -p password;
Enter password:*******
mysql> use XXXXXX;
Database changed
mysql> create table xxxxxx_test_tbl
-> (
-> xxxxxx_author varchar(40) NOT NULL,
-> xxxxxx_count INT
-> );
Query OK, 0 rows affected (0.05 sec)
mysql> INSERT INTO xxxxxx_test_tbl (xxxxxx_author, xxxxxx_count) values ('XXXXXX', 20);
mysql> INSERT INTO xxxxxx_test_tbl (xxxxxx_author, xxxxxx_count) values ('菜鸟教程', NULL);
mysql> INSERT INTO xxxxxx_test_tbl (xxxxxx_author, xxxxxx_count) values ('Google', NULL);
mysql> INSERT INTO xxxxxx_test_tbl (xxxxxx_author, xxxxxx_count) values ('FK', 20);
mysql> SELECT * from xxxxxx_test_tbl;
+---------------+--------------+
| xxxxxx_author | xxxxxx_count |
+---------------+--------------+
| XXXXXX | 20 |
| X教X程 | NULL |
| Google | NULL |
| FK | 20 |
+---------------+--------------+
4 rows in set (0.01 sec)
以下实例中你可以看到 = 和 != 运算符是不起作用的:
mysql> SELECT * FROM xxxxxx_test_tbl WHERE xxxxxx_count = NULL;
Empty set (0.00 sec)
mysql> SELECT * FROM xxxxxx_test_tbl WHERE xxxxxx_count != NULL;
Empty set (0.01 sec)
查找数据表中 xxxxxx_test_tbl 列是否为 NULL,必须使用 IS NULL 和 IS NOT NULL,如下实例:
mysql> SELECT * FROM xxxxxx_test_tbl WHERE xxxxxx_count IS NULL;
+---------------+--------------+
| xxxxxx_author | xxxxxx_count |
+---------------+--------------+
| XX教程 | NULL |
| Google | NULL |
+---------------+--------------+
2 rows in set (0.01 sec)
mysql> SELECT * from xxxxxx_test_tbl WHERE xxxxxx_count IS NOT NULL;
+---------------+--------------+
| xxxxxx_author | xxxxxx_count |
+---------------+--------------+
| XXXXXX | 20 |
| FK | 20 |
+---------------+--------------+
2 rows in set (0.01 sec)
使用 PHP 脚本处理 NULL 值
PHP 脚本中你可以在 if...else 语句来处理变量是否为空,并生成相应的条件语句。
以下实例中 PHP 设置了 $xxxxxx_count 变量,然后使用该变量与数据表中的 xxxxxx_count 字段进行比较:
MySQL ORDER BY 测试:
<?php
$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($xxxxxx_count ))
{
$sql = "SELECT xxxxxx_author, xxxxxx_count
FROM xxxxxx_test_tbl
WHERE xxxxxx_count = $xxxxxx_count";
}
else
{
$sql = "SELECT xxxxxx_author, xxxxxx_count
FROM xxxxxx_test_tbl
WHERE xxxxxx_count IS NULL";
}
mysqli_select_db( $conn, 'XXXXXX' );
$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['xxxxxx_author']} </td> ".
"<td>{$row['xxxxxx_count']} </td> ".
"</tr>";
}
echo '</table>';
mysqli_close($conn);
?>
边栏推荐
- 一加Ace值得买吗?用实力诠释性能的强大
- “vite”和“vite预览”有什么区别?
- Interpretation of the paper (JKnet) "Representation Learning on Graphs with Jumping Knowledge Networks"
- Weekly recommended short video: In order to fill the gap of learning resources, the author specially wrote a book?
- 【mysql】SIGN(x) function
- 一些嵌入式软件设计经验
- 多线程 里面 使用AtomicInteger类,保证线程安全
- 全尺度表示的上下文非局部对齐,南科大&优图提出NAFS解决基于文本的Re ID
- LeetCode - 102. 二叉树的层序遍历;110. 平衡二叉树;098. 验证二叉搜索树
- 并查集模板及思想
猜你喜欢
随机推荐
WebGL管网展示(及TubeGeometry优化)
AI智能剪辑,仅需2秒一键提取精彩片段
Execution plan of mysql
一加Ace值得买吗?用实力诠释性能的强大
一些嵌入式软件设计经验
揭秘deepin 23,从这里开始!
How to install and start VNC remote desktop service on cloud GPU?
这是Facebook母公司 关于元宇宙的80万亿美元豪赌
“vite”和“vite预览”有什么区别?
Weekly recommended short video: In order to fill the gap of learning resources, the author specially wrote a book?
PMP考试通关宝典-敏捷专题
STM32——LCD—FSMC原理简介
003_Kubernetes核心技术
MVCC多版本并发控制的理解
LeetCode - 102. 二叉树的层序遍历;110. 平衡二叉树;098. 验证二叉搜索树
全尺度表示的上下文非局部对齐,南科大&优图提出NAFS解决基于文本的Re ID
es6新增-async函数(异步编程的最终解决方案)
JVS低代码-多数据模型与数据联动配置举例
深度学习跟踪DLT (deep learning tracker)
es6新增-Promise详解(异步编程的解决方案1)