SQL中的Null值
为什么80%的码农都做不了架构师?>>>
Null是表示一种“未知”的类型,除了SQL已定义的数据类型外其他都是“未知”的类型。
Null不支持大小/相等判断
Null是“未知”类型,既然“未知”类型,那就无法判断一个未知类型或一个已知类型与一个未知类型是否相等或大或小。于是下面这个sql语句返回的是NULL
select null > 0;
select null < 0;
select null = 0;
判读是否是Null的方式是使用is null 或者 is not null
select 1 is not null;
[not] in 与 Null
例如:x not in (1,2,null) 等价于 x !=1 and x!=2 and x!=null 因为null与任何值比较都返回null所以一旦in后面的货号里有null值则整个查询结果都为null.
相反的如果是x in (1,2,null),则等价于是x=1 or x=2 or x=null,同理这种情况null会被忽略.
Null与排序与比较
在排序时可以使用coalesce函数将Null转换成0,coalesce的功能:
COALESCE (expression_1, expression_2, ...,expression_n)依次参考各参数表达式,遇到非null值即停止并返回该值。如果所有的表达式都是空值,最终将返回一个空值。使用COALESCE在于大部分包含空值的表达式最终将返回空值。
例如coalesce(age, 0)这样就可以将age为null的默认转换成0.排序时如果排序字段为null则会排在最前面,如果不想让这些null值记录排在前面,就可以使用coalesce函数消除null:
select * from user order by coalesce(age,0)
同理在比较的大小的时候也可以这样做,如果业务里Null等价于0(或者其他值)则可以用coalesce转换一下,例如:
select * from good where coalesce(price,0) > 55.5;
select * from user where coalesce(age,0) in (,10,20,30);
被 0 除
除数为0是一个非常 egg-painfull 的错误。昨天还运行得好好的SQL,突然被0除一下子就出错了。一个常用的解决方法是先用 case 语句判断分母(denominator)是否为0,再进行除法运算。这种方式其实很难看,而且分母被重复使用了。如果是简单的情况还好,如果分母是个很复杂的表达式,那么悲剧就来了: 很难读,很难维护和修改,一不小心就是一堆BUG. 这是就可以使用null来解决,因为null除任何数都是null,所以可以使用nullif函数将可以能为0的值转出null(如果需要还可以再使用coalesce函数将null再转成其他值)
select coalesce(total_sales/nullif(num_users, 0), 0);
转载于:https://my.oschina.net/admq/blog/758395
SQL中的Null值相关推荐
- sql如何处理null值_如何正确处理SQL中的NULL值
sql如何处理null值 前言 (Preface) A friend who has recently started learning SQL asked me about NULL values ...
- 下列有关mysql数据库中的null值_MySQL数据库中与 NULL值有关的问题
对于SQL的新手,NULL值的概念常常会造成混淆,他们常认为NULL是与空字符串"相同的事.情况并非如此.例如,下述语句是完全不同的: mysql> INSERT INTO my_ta ...
- mysql中与null值不能比较
在mysql中,选择某field为不等于某值的时候,使用<>符号.但查bug时发现该field为null的并不能查出来. 查原因为: null值不能与其他值进行比较,只能使用is null ...
- mysql null的作用_MySQL中对于NULL值的理解和使用教程
NULL值的概念是造成SQL的新手的混淆的普遍原因,他们经常认为NULL是和一个空字符串''的一样的东西.不是这样的!例如,下列语句是完全不同的: ?12mysql>INSERT INTO my ...
- hive建表设置如果为null_Hive表中的NULL值处理
1 MySQL 到 Hive 表的sqoop任务把 原本的NULL 变成字符串 'null' 了 alter table ${table_name} SET SERDEPROPERTIES('seri ...
- MySql中的NULL值和空值
定义: 空值:表示一个空字符或零长度的字符串,可以使用空引号""来表示: NULL值:MySql中,NULL表示缺少一个已知或适当的值. 除了整数类型的列外,所有其他类型的列(包括 ...
- sql 语句中的 NULL值
今天写了这样的代码 DECLARE @atr NVARCHAR(20) SET @atr = NULL IF(@atr = NULL) BEGIN PRINT 1 END 原本是想打印出1 ...
- mysql union null_mysql – 删除SQL中的SQL JOIN和UNION操作符中的NULL值
[求助]如何仅在字段provider_order中删除NULL值,在我的情况下,表使用JOIN表和UNION 这是我的数据库模式和我的SQL查询 为了清楚地描述这里我附上图片 最佳答案 您不能仅删除行 ...
- 我是如何学会不再担心和喜欢SQL中的NULL的
应使用适当的SQL函数来避免为数据串联.比较.ORDER BY或GROUP BY等操作获得不需要的输出.您不应该试图阻止NULL值--相反,以克服其限制的方式编写您的查询. 该NULL值是一种表示未知 ...
最新文章
- 程序人生--从这里开始
- CodeBlocks 更改 gui 程序为 命令行
- MT6580热设计要求
- 与TIME_WAIT相关的几个内核参数
- 如何控制油门更准确?
- 如何用Pygame写游戏(十五)
- 正则判断手机号是不是11位
- JS如何判断浏览器类型和详细区分IE各版本浏览器
- linux光驱安装内核,Linux的内核管理--之光盘恢复grub的方法
- java 人脸检测 人脸抓拍
- d3.js画金庸小说力导向图
- 苹果芯片订单立功 台积电股价创新高
- 使用ant design的table控件最后一列固定(fixed)遇到的问题
- Java面向对象系列[v1.0.0][类加载器]
- div和span的标签属性及说明
- 混沌麻雀搜索优化算法-附代码
- 落地语音交互,出门问问从Google Glass开始
- 分享一些写博客的实用工具
- android下查看内存阀值限制
- 动态令牌 (谷歌身份验证器)的实现