`
LeeYee
  • 浏览: 72129 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

order by 语句对null字段的默认排序

    博客分类:
  • SQL
阅读更多

在使用order by语句进行查询结果排序时,不同的数据库对于被排序字段数据行为null的情况,处理方式有所不同,这里我们主要考虑oracle和mysql数据库。

首先我们直接给出结论:

leeyee 写道
【Oracle 结论】 
order by colum asc 时,null默认被放在最后
order by colum desc 时,null默认被放在最前
nulls first 时,强制null放在最前,不为null的按声明顺序[asc|desc]进行排序
nulls last 时,强制null放在最后,不为null的按声明顺序[asc|desc]进行排序 
【MySql 结论】
order by colum asc 时,null默认被放在最前
order by colum desc 时,null默认被放在最后
ORDER BY IF(ISNULL(update_date),0,1) null被强制放在最前,不为null的按声明顺序[asc|desc]进行排序
ORDER BY IF(ISNULL(update_date),1,0) null被强制放在最后,不为null的按声明顺序[asc|desc]进行排序

 注:以上结果是在oracle11g及mysql5下的测试结果。

 

因此当我们在order by时,为了强制说明对于null的排序顺序就必须使用到:

 

针对【oracle】我们就需要使用以下语法:

order by order_col [asc|desc] nulls [first|last]

而针对【mysql】我们则需要使用以下语法:

order by IF(ISNULL(my_field),1,0),my_field;

下面在oracle11g下做个测试:

 

测试数据:

 

rownum create_date update_date
1 20-3月 -11 18-6月 -11
2 20-4月 -11
3 20-5月 -11 20-6月 -11

【无排序/默认排序】

select update_date from table_name ; 
leeyee 写道
[结果]
1 18-6月 -11

3 20-6月 -11

【asc排序】

select update_date from table_name order by update_date; 
leeyee 写道
[结果]
1 20-6月 -11
2 18-6月 -11
3

【desc排序】

select update_date from table_name order by update_date desc; 
leeyee 写道
[结果]

2 18-6月 -11
3 20-6月 -11

【asc排序,强制null放在最前】

select update_date from table_name order by update_date nulls first; 
leeyee 写道
[结果]

2 20-6月 -11
3 18-6月 -11

【asc排序,强制null放在最后】

select update_date from table_name order by update_date nulls last; 
leeyee 写道
[结果]
1 20-6月 -11
2 18-6月 -11
3

mysql5.0测试

select update_date from table_name order by IF(ISNULL(update_date),0,1),update_date;
分享到:
评论

相关推荐

    MySQL中Order By多字段排序规则代码示例

    总结来说,MySQL的`ORDER BY`语句允许对查询结果进行多字段排序,先按照第一个字段排序,如有重复值,则按照后续字段继续排序。理解这一点对于优化SQL查询和确保数据按预期排列至关重要。在实际应用中,应根据具体...

    Server2005高效分页存储过程(支持多字段排序,支持Group By)

    该存储过程名为`sp_PageList2005`,其主要功能是实现对数据库表中的数据进行分页查询,并支持多字段排序以及`GROUP BY`分组等功能。这使得它能够广泛应用于需要高效分页显示数据的场景中。 #### 参数说明 1. **@...

    Oracle数据库中对null值的排序及mull与空字符串的区别

    Oracle规定,在`ORDER BY`语句执行排序时,默认情况下null被视为最大值。这意味着在升序(ASC)排序中,null会出现在所有非null值之后,而在降序(DESC)排序中,null会出现在所有非null值之前。这种默认行为可能会...

    oracle使用order by排序null值如何处理

    在Oracle数据库中,排序(Order By)是SQL查询的一个重要组成部分,它允许用户根据一个或多个列对查询结果进行升序或降序排列。然而,当涉及到含有NULL值的列时,Oracle默认的行为可能并不符合所有人的预期。NULL在...

    Oracle 中文字段进行排序的sql语句

    例如,`ORDER BY`子句中的`NULL`值处理,Oracle默认会将`NULL`值放在排序序列的最后。如果希望`NULL`值出现在排序的前面,可以使用`COALESCE`函数或`NVL`函数将其转换为一个特定值后再进行排序。 此外,当使用`IN`...

    SQL语句的条件查询和排序操作

    - **多字段排序**:可以在`ORDER BY`子句中指定多个列来实现更复杂的排序需求。例如,先按部门编号升序排序,再按工资降序排序: ```sql SELECT ename, deptno, sal FROM emp ORDER BY deptno, sal DESC; ``` ...

    sql语句规范

    * 避免使用 ORDER BY RAND() 语句,以免耗费大量的 CPU 资源 7. COUNT 语句规范 * 使用 SELECT COUNT(*) 语句,而不是 SELECT COUNT(列名) 语句,以提高查询性能 * 尽量减少 SELECT 语句的使用,以减少数据库的...

    SQL语句之基础语法汇总

    * sorting和分组操作:使用ORDER BY和GROUP BY语句对数据进行排序和分组 * filtering操作:使用WHERE语句对数据进行过滤 * aggregation操作:使用SUM、AVG、MAX、MIN等聚合函数对数据进行聚合 五、实践经验 * 在...

    MySQL Order By用法分享

    总结一下,MySQL的`ORDER BY`语句主要用于对查询结果进行排序,支持升序(ASC)和降序(DESC)两种方式,可以对一个或多个字段进行排序,并且能够与其他SQL语句配合使用,满足多种查询场景。掌握`ORDER BY`的用法...

    ORACLE SQL语句优化技术分析

    - Orderby语句:在使用Orderby进行数据排序时,如果排序的字段没有建立索引,或者排序字段上有计算表达式,都可能导致性能降低。应避免在Orderby中使用非索引列或者包含计算的表达式,或者考虑建立适当的索引以提升...

    DB2常用语句集萃

    11. **多条件排序**:`ORDER BY`子句可以同时根据多个字段进行排序,如`ORDER BY a.cust_id, tot_amt desc`先按客户编号排序,同一客户再按订单金额降序排序。 12. **特殊条件查询**:如查找16M DRAM的销售情况,...

    Order By靶场(PHP+Mysql)

    在靶场中,攻击者可能会尝试注入如`ORDER BY (SELECT NULL)`这样的语句,导致查询结果无序,或者尝试获取额外信息的语句,如`ORDER BY (SELECT password FROM users WHERE id=1)`。 `ReadMe.txt`文件通常包含了靶场...

    数据库函数和查询语句

    基本的查询语句包括`SELECT`,可以配合`WHERE`子句过滤结果,使用`GROUP BY`进行分组,`ORDER BY`进行排序,以及`JOIN`操作连接不同表的数据。 综上所述,数据库函数和查询语句是数据库管理系统中的基础操作,用于...

    对Oracle 排序中的几种常用排序的介绍

    例如,以下语句会按照汉语拼音对`danwei`字段进行升序排序: ```sql select * from perexl order by nlssort(danwei,'NLS_SORT=SCHINESE_PINYIN_M'); ``` 2. **按部首排序**:如果需要根据汉字的部首进行排序,...

    sql语句性能调整原则

    4. **优化ORDER BY子句**:ORDER BY用于对查询结果进行排序,但非索引列的排序会导致性能下降。如果可能,重写ORDER BY子句以便利用已有的索引,或者为用于排序的列创建新的索引。避免在ORDER BY中使用计算表达式。 ...

    MySQL语法语句大全[归类].pdf

    其中,select_expression是选择的列名,table_references是表名,where_definition是条件语句,group by是分组语句,having是过滤语句,order by是排序语句,limit是限制语句。 例如,执行一个简单的查询: mysql>...

    SQL语句练习提高

    这两个查询都将返回`num`字段的最小值,因为它们都首先对`num`进行排序,然后选择第一个记录。 33. 要求查询每个`Customer`的`Revenue`总和。这里有几种不同的写法,它们都会得到相同的结果: ```sql -- 方法一:...

    oracle基础语句.docx

    排序是指根据某个字段对结果集进行排序。下面的语句将 student 表中的记录按照 stuName 字段降序排列。 select * from student order by stuName desc; 九、创建新表 创建新表是指从已有的表中选取数据创建一个新...

    ORACLE-SQL语句优化技术分析.docx

    Order by 语句对要排序的列没有什么特别的限制,也可以将函数加入列中(象联接或者附加等)。任何在 Order by 语句中使用函数都会使优化器不使用索引。例如:select * from employee order by UPPER(last_name); ...

Global site tag (gtag.js) - Google Analytics