基础-NULL的处理

NULL的处理往往是查询过程的处理重点,本文探讨一些可能的情况

1.NULL的特性

# NULL与任何值比较或运算的结果都是NULL,包括其本身
SELECT 1>NULL;# NULL
SELECT 1+NULL;# NULL
SELECT NULL=NULL;# NULL
# NULL的判定必须使用IS NULL或IS NOT NULL
SELECT NULL IS NULL;# 1

2.聚合函数中的NULL

# 聚合函数默认忽略NULL

# 假定colname列中存在NULL
SELECT COUNT(colname) FROM tbname;# 返回不包含NULL的总数
SELECT AVG(colname) FROM tbname;
SELECT SUM(colname)/COUNT(colname) FROM tbname;# 等价于上行查询

# 假定colname列中存在NULL,NULL视为0,求colname的平均值
SELECT AVG(IF(colname IS NULL,0,colname)) FROM tbname;
SELECT SUM(colname)/COUNT(*) FROM tbname;# 等价于上行查询

# 假定colname列中存在NULL,求NULL的个数
SELECT SUM(colname IS NULL) FROM tbname;

# 假定colname列全为NULL,聚合函数的结果
SELECT COUNT(colname) FROM tbname;# 返回0
SELECT MAX(colname) FROM tbname;# 返回NULL

# 假定colname1列存在NULL,求colname1列NULL值对应记录的colname2列的平均值
SELECT AVG(IF(colname1 IS NULL,colname2,NULL)) FORM tbname;

# 假定colname1列存在NULL,按colname1是否为NULL分组求colname2列的总和
SELECT 
	IF(colname1 IS NULL,'NULL汇总','其他汇总') AS group_name,
	SUM(colname2) 
FROM tbname 
GROUP BY 
	IF(colname1 IS NULL,'NULL汇总','其他汇总');

3.联接中的NULL

未完待续

4.相关题目

简单查询:SQL10 用where过滤空值练习

涉及联接:SQLW3 分析客户逾期情况

涉及联接:SQL34 统计复旦用户8月练题情况

更多知识见专栏

#SQL菜鸟#
MySQL的使用 文章被收录于专栏

阅读顺序为:入门->基础(务必阅读,尤其是SELECT语句的执行顺序)->进阶->应用(综合使用)。 这是一部较为系统的大纲式SQL查询教程,学习过程中应同步参考官方文档或其他相关资料,交叉阅读方能更好掌握知识,学会后基本可以完成站内90%以上的相关试题。 DDL及DML的其他内容后续更新。 如有帮助请您点赞收藏订阅,如有疑惑或指正请评论。 共同学习共同进步!

全部评论

相关推荐

10-07 20:48
门头沟学院 Java
听说改名就会有offer:可能是实习上着班想到后面还要回学校给导师做牛马,看着身边都是21-25的年纪,突然emo了了
点赞 评论 收藏
分享
球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务