MySQL中将空数据转换为NULL值

问题描述

在刷LeetCode数据库练习题176.第二高的薪水619.只出现一次的最大数字时,遇到了这样的问题:若数据为空,则返回NULL
作为一个SQL菜鸟,想不出要怎么判断数据是否为空并返回NULL,后面在CSDN搜索到了相关文章,并通过LeetCode大佬的题解,彻底明白了空数据与NULL的转换,并在此写下博客,方便日后查阅。

参考文章CSDN文章链接LeetCode题解链接


测试

1. 测试数据

使用大佬的测试数据,但是测试条件稍微修改下,简洁点,方便理解

CREATE TABLE IF NOT EXISTS my_numbers (num INT);
TRUNCATE TABLE my_numbers
INSERT INTO my_numbers (num) VALUES ('8');
INSERT INTO my_numbers (num) VALUES ('8');
INSERT INTO my_numbers (num) VALUES ('3');
INSERT INTO my_numbers (num) VALUES ('3');
INSERT INTO my_numbers (num) VALUES ('4');
INSERT INTO my_numbers (num) VALUES ('4');
INSERT INTO my_numbers (num) VALUES ('5');
INSERT INTO my_numbers (num) VALUES ('5');

2. 空表SQL

根据测试数据,构造一条基础SQL,该SQL查询出来的表为空(不是NULL)

SELECT num FROM my_numbers WHERE num > 10;

3. 一轮查询-聚合函数

不使用聚合函数查询

SELECT num FROM my_numbers WHERE num > 10;

不使用聚合函数查询的结果

使用聚合函数查询

SELECT
	SUM(num) sum_num,
	AVG(num) avg_num,
	MAX(num) max_num,
	MIN(num) min_num
FROM my_numbers
WHERE num > 10;

使用聚合函数查询的结果
由此可知,聚合函数是可以将空数据转换为NULL的。

4. 二轮查询-IFNULL()

使用IFNULL()查询

SELECT
	IFNULL((SELECT num FROM my_numbers WHERE num > 10), NULL)
AS num;

使用IFNULL()查询的结果
不使用IFNULL()查询

SELECT
	(SELECT num FROM my_numbers WHERE num > 10)
AS num;

不使用IFNULL()查询的结果
由此可知,虽然空数据转换为NULL,但并不是IFNULL()的作用

5. 三轮查询-SELECT与FROM

将空表放在SELECT后

SELECT(
	SELECT num FROM my_numbers WHERE num > 10
) num;

将空表放在SELECT后
将空表放在FROM后

SELECT tmp.num
FROM (SELECT num FROM my_numbers WHERE num > 10) tmp;

将空表放在FROM后
由此可知

  • SELECT 空表:会将空值转换为NULL
  • FROM 空表:不会将空值转换为NULL

总结

总结表格

  • 空表格:表格没有任何数据,没有任何输出
  • 表格值为null:表格有数据,只是为NULL

空数据转NULL值总结

  • 使用聚合函数,SUM/AVG/MAX/MIN
  • 使用SELECT语句,但空值需要写在SELECT中而不是FROM中
  • LIMIT语句无法出现新的NULL值(本文没做测试,可以阅读大佬文章,不过这很好理解,LIMIT是对结果集进行截取,并不会出现新的NULL值)
  • WHERE和HAVING无法出现新的NULL值(通过空表SQL可知WHERE不会出现新的NULL值,HAVING同理)
  • 17
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值