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。此规定在比较运算符中引入了三值逻辑,而要正确运用该逻辑很困难。

时间: 2024-10-26 01:33:47

mysql 等 null 空值排序的相关文章

数据库空值排序

在开发数据库程序的过程中,经常会碰到排序时遇到空值问题,有时希望空值排在前面,有时希望排在后面. 本文简单记录下oracle和mysql的空值排序问题. 样本: oracle空值排序: oracle提供了专门处理方法nulls first(last),使用起来很方便 空值在前面 select * from tb_test order by lv nulls first 空值在最后 select * from tb_test order by lv nulls last mysql中的空值排序:

关于Oracle数据库中SQL空值排序的问题

在Oracle中进行查询排序时,如果排序字段里面有空值的情况下,排序结果可能会达不到自己想要的结果. 如 select * from tableTest order by VISITS desc 将原来的sql语句改写为:select * from tableTest order by VISITS desc nulls last,"nulls last"控制将空值记录放在后面,当然,你也可以用"nulls first"将控制记录放在前面. oracle 空值处理,

空值排序(oracle/sqlserver)

oracle认为 null 最大. 升序排列,默认情况下,null值排后面. 降序排序,默认情况下,null值排前面. 改变空值办法: (1)用nvl函数或decode函数将null转换为一特定值 替换null: nvl(arg,value) (2)用case语法将null转换为一特定值(oracle9i以后版本支持.和sqlserver类似): order by (case mycol when null then‘北京漂客’else mycol end) (3)使用nulls first 或

mysql根据汉字拼音排序查询

例如现在有一张数据表label,字段为id.name,此表的字符集设置为gb2312,以gb2312_chinese_ci整理. 设置InnoDB引擎的字符集也为简体中文,且整理为gb2312_chinese_ci. 查询语句如下: select * from label order_by name collate gb2312_chinese_ci; 效果如下: tip:有时候结果不是很准确,不知道是不是因为字符集选择的不当导致的,知道的朋友,请解答下,谢谢! mysql根据汉字拼音排序查询,

使mysql按中文字段排序

http://ourmysql.com/archives/391 测试后我发现,gbk不仅对字符内容是按拼音排序的,对数字也是一样,使用时需注意! 另外一篇文章: MySQL按中文拼音排序

mysql 将null转代为0

mysql 将null转代为0 分类: Mysql2012-12-15 11:56 6447人阅读 评论(1) 收藏 举报 1.如果为空返回0 select ifnull(null,0) 2.如果为空返回0,否则返回1 select if(isnull(col),0,1) as col. MYSQL 中的IFNULL函数 IFNULL(expr1,expr2) 如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2.IFNULL()返回一个数字或字符串值,取决于它被使用

SQL Server、Oracle和MySQL判断NULL的方法

SQL Server.Oracle和MySQL判断NULL的方法 本文讲述SQL Server.Oracle.MySQL查出值为NULL的替换. 在SQL Server Oracle MySQL当数据库中查出某值为NULL怎么办? 1.MSSQL: ISNULL() 语法 Java代码 复制代码代码如下: ISNULL ( check_expression , replacement_value ) ISNULL ( check_expression , replacement_value )

Mysql Order By 字符串排序,mysql 字符串order by

Mysql Order By 字符串排序,mysql 字符串order by ============================== ?Copyright 蕃薯耀 2017年9月30日 http://fanshuyao.iteye.com/ 一.问题描述: Mysql排序时如果用的的字段为字符串型的,排序规则是这样的:如1,10,2,20,3,4,5,这种排序是按照字符从第一个字符开始比较出来的,但不是我想要的,我想要的是:1,2,3,4,5--,10,20这种. 二.解决方案 排序时,把

Mysql的NULL和Empty String

最近新接触Mysql,昨天新建一个表用于存储表结构信息: create table tablist(TABLE_SCHEMA varchar(40),TABLE_NAME varchar(40),COLUMN_NAME varchar(40),COLUMN_TYPE varchar(40), IS_NULLABLE varchar(10),COLUMN_DEFAULT varchar(40),COLUMN_COMMENT varchar(1000),REMARK varchar(2000));