mysql等null空值排序【sqlserver】:
sqlserver 认为 null 最⼩。
升序排列:null 值默认排在最前。
要想排后⾯,则:order by case when col is null then 1 else 0 end ,col
降序排列:null 值默认排在最后。
要想排在前⾯,则:order by case when col is null then 0 else 1 end , col desc
【oracle】:
oracle认为 null 最⼤。
升序排列,默认情况下,null值排后⾯。
降序排序,默认情况下,null值排前⾯。
空值是指零长度的字符串有⼏种办法改变这种情况:
(1)⽤ nvl 函数或decode 函数将null转换为⼀特定值
(2)⽤case语法将null转换为⼀特定值(oracle9i以后版本⽀持。和sqlserver类似):
order by (case mycol when null then '北京漂客' else mycol end)
(3)使⽤nulls first 或者nulls last 语法。
这是oracle专门⽤来null值排序的语法。
nulls first :将null排在最前⾯。如:select * from mytb order by mycol nulls first
null last :将null排在最后⾯。如:select * from mytb order by mycol nulls last
如果要想让含有null的列按照⾃⼰的意愿进⾏排序,可做如上处理。
【mysql】:
MySQL同sqlserver,null默认最⼩,解决办法同sqlserver
注意:
1、null的列作为查询条件时,⽆论使⽤>/</>=/<=都是不符合条件的,只能使⽤isNull来判断。如下:
id为4的age字段为空,
执⾏SQL:select * from student where age >= 30; 结果如下:
执⾏SQL:select * from student where age < 30; 结果如下:
只有执⾏SQL:select * from student where age is null; 才能查询出age为null的数据。
2、对null做加、减、乘、除等运算操作,结果仍为空
刚开始student表数据如下:
执⾏SQL:update student set age = age + 20;
执⾏SQL:select * from student; 结果如下:
⾮null的age字段都更新为+20,⽽null字段依然为空。
上⾯的测试数据库为MySQL,Oracle也⼀样。SQL Server没测试过,应该也是⼀样的。
空值
列可以接受或拒绝空值。在数据库内 NULL 是特殊值,代表未知值的概念。NULL 不同于空字符或 0。空字符实际上是有效字符,0 是有效数字。⽽ NULL 只是表⽰该值未知这⼀概念。NULL 也不同于零长度字符串。如果列定义中包含 NOT NULL ⼦句,则不能为该⾏插⼊含有NULL 值的⾏。如果列定义中仅包含 NULL 关键字,则接受 NULL 值。
在列内允许 NULL 值会增加使⽤该列的逻辑⽐较的复杂性。SQL-92 标准规定:对 NULL 值的任何⽐较都不取值为 TRUE 或 FALSE,⽽是取值为 UNKNOWN。此规定在⽐较运算符中引⼊了三值逻辑,⽽要正确运⽤该逻辑很困难。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论