在使用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
2
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 写道
[结果]
1
2 18-6月 -11
3 20-6月 -11
【asc排序,强制null放在最前】
select update_date from table_name order by update_date nulls first;
leeyee 写道
[结果]
1
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;
分享到:
相关推荐
在实际开发过程中,当尝试通过动态SQL的方式实现排序功能时,可能会遇到一个常见问题:使用`order by #{sortInfo}`进行排序时,发现查询结果并未按照预期排序。例如,若传入的排序参数为`empno desc`,则期望的结果...
总结来说,MySQL的`ORDER BY`语句允许对查询结果进行多字段排序,先按照第一个字段排序,如有重复值,则按照后续字段继续排序。理解这一点对于优化SQL查询和确保数据按预期排列至关重要。在实际应用中,应根据具体...
该存储过程名为`sp_PageList2005`,其主要功能是实现对数据库表中的数据进行分页查询,并支持多字段排序以及`GROUP BY`分组等功能。这使得它能够广泛应用于需要高效分页显示数据的场景中。 #### 参数说明 1. **@...
Oracle规定,在`ORDER BY`语句执行排序时,默认情况下null被视为最大值。这意味着在升序(ASC)排序中,null会出现在所有非null值之后,而在降序(DESC)排序中,null会出现在所有非null值之前。这种默认行为可能会...
在Oracle数据库中,排序(Order By)是SQL查询的一个重要组成部分,它允许用户根据一个或多个列对查询结果进行升序或降序排列。然而,当涉及到含有NULL值的列时,Oracle默认的行为可能并不符合所有人的预期。NULL在...
例如,`ORDER BY`子句中的`NULL`值处理,Oracle默认会将`NULL`值放在排序序列的最后。如果希望`NULL`值出现在排序的前面,可以使用`COALESCE`函数或`NVL`函数将其转换为一个特定值后再进行排序。 此外,当使用`IN`...
- **多字段排序**:可以在`ORDER BY`子句中指定多个列来实现更复杂的排序需求。例如,先按部门编号升序排序,再按工资降序排序: ```sql SELECT ename, deptno, sal FROM emp ORDER BY deptno, sal DESC; ``` ...
* 避免使用 ORDER BY RAND() 语句,以免耗费大量的 CPU 资源 7. COUNT 语句规范 * 使用 SELECT COUNT(*) 语句,而不是 SELECT COUNT(列名) 语句,以提高查询性能 * 尽量减少 SELECT 语句的使用,以减少数据库的...
* sorting和分组操作:使用ORDER BY和GROUP BY语句对数据进行排序和分组 * filtering操作:使用WHERE语句对数据进行过滤 * aggregation操作:使用SUM、AVG、MAX、MIN等聚合函数对数据进行聚合 五、实践经验 * 在...
总结一下,MySQL的`ORDER BY`语句主要用于对查询结果进行排序,支持升序(ASC)和降序(DESC)两种方式,可以对一个或多个字段进行排序,并且能够与其他SQL语句配合使用,满足多种查询场景。掌握`ORDER BY`的用法...
- Orderby语句:在使用Orderby进行数据排序时,如果排序的字段没有建立索引,或者排序字段上有计算表达式,都可能导致性能降低。应避免在Orderby中使用非索引列或者包含计算的表达式,或者考虑建立适当的索引以提升...
11. **多条件排序**:`ORDER BY`子句可以同时根据多个字段进行排序,如`ORDER BY a.cust_id, tot_amt desc`先按客户编号排序,同一客户再按订单金额降序排序。 12. **特殊条件查询**:如查找16M DRAM的销售情况,...
在靶场中,攻击者可能会尝试注入如`ORDER BY (SELECT NULL)`这样的语句,导致查询结果无序,或者尝试获取额外信息的语句,如`ORDER BY (SELECT password FROM users WHERE id=1)`。 `ReadMe.txt`文件通常包含了靶场...
基本的查询语句包括`SELECT`,可以配合`WHERE`子句过滤结果,使用`GROUP BY`进行分组,`ORDER BY`进行排序,以及`JOIN`操作连接不同表的数据。 综上所述,数据库函数和查询语句是数据库管理系统中的基础操作,用于...
例如,以下语句会按照汉语拼音对`danwei`字段进行升序排序: ```sql select * from perexl order by nlssort(danwei,'NLS_SORT=SCHINESE_PINYIN_M'); ``` 2. **按部首排序**:如果需要根据汉字的部首进行排序,...
4. **优化ORDER BY子句**:ORDER BY用于对查询结果进行排序,但非索引列的排序会导致性能下降。如果可能,重写ORDER BY子句以便利用已有的索引,或者为用于排序的列创建新的索引。避免在ORDER BY中使用计算表达式。 ...
其中,select_expression是选择的列名,table_references是表名,where_definition是条件语句,group by是分组语句,having是过滤语句,order by是排序语句,limit是限制语句。 例如,执行一个简单的查询: mysql>...
这两个查询都将返回`num`字段的最小值,因为它们都首先对`num`进行排序,然后选择第一个记录。 33. 要求查询每个`Customer`的`Revenue`总和。这里有几种不同的写法,它们都会得到相同的结果: ```sql -- 方法一:...
排序是指根据某个字段对结果集进行排序。下面的语句将 student 表中的记录按照 stuName 字段降序排列。 select * from student order by stuName desc; 九、创建新表 创建新表是指从已有的表中选取数据创建一个新...