【Oracle命令】sql语句之排序(order by)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【Oracle命令】sql语句之排序(order by),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3450字,纯文字阅读大概需要5分钟。
内容图文
![【Oracle命令】sql语句之排序(order by)](/upload/InfoBanner/zyjiaocheng/515/ebdd60e900e7412eb153b9319a101da7.jpg)
-- 降序排序(最新的显示在前面)
SELECT * FROM 表名 t ORDER BY t.uploadDatetime DESC;
格式:
ORDER BY { column-Name | ColumnPosition | Expression }
[ ASC | DESC ]
[ NULLS FIRST | NULLS LAST ]
[ , column-Name | ColumnPosition | Expression
[ ASC | DESC ]
[ NULLS FIRST | NULLS LAST ]
] *
PS:默认为升序ASC
知识点:
order by
后面可以接列号(数字)、列名、别名、表达式、函数、分组函数order by
对空值的处理,DESC
空值在前,ASC
空值在后;order by
子句中可以不含select
中的列;- 当使用
select distinct
或group by
时,order by
不能使用select之外的列; order by
只能放最后,不能放集合操作的中间;- 集合操作后,不接
order by
时按第一列进行升序排序(union all
除外); - 集合操作后的列名为第一个
select
的内容,order by
只能选第一个select
中的内容进行操作
select job, avg(sal) "Average Salary"
from emp
group by job
order by "Average Salary" DESC;
补充:
Union(union all): 指令的目的是将两个 SQL 语句的结果集合并起来,得到你所需要的查询结果。
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
order by子句必须写在最后一个结果集里,并且其排序规则将改变操作后的排序结果。对于Union、Union All都有效。
实例:
1)按照名称排序(默认升序)、按照名称升序(ASC),按照名称降序(DESC),如果名称有相同的按照id降序排序(降序相当于显示最新的在前面)
-- 默认升序
SELECT * FROM t_test t ORDER BY t.content;
-- 按名称升序
SELECT * FROM t_test t ORDER BY t.content ASC;
-- 按名称降序
SELECT * FROM t_test t ORDER BY t.content DESC
-- 名称相同的按id降序(将最新的排序)。这里我新添加了一条数据test4
SELECT * FROM t_test t ORDER BY t.content DESC,t.id DESC;
2)缺省处理:oracle在order by时认为null是最大值, 所以如果是asc升序则排在最后, desc降序则排在最前.我们可以使用nulls first或者nulls last来控制null的位置。
-- 升序显示,默认null值在后面,使用nulls first将null显示在最前面
SELECT * FROM t_test t ORDER BY t.content ASC NULLS FIRST;
-- 降序显示,默认null值在前面,使用null last将null显示在最后面
SELECT * FROM t_test t ORDER BY t.content DESC NULLS FIRST;
mysql的如下:
-- null值显示在最前面
SELECT * FROM t_test t ORDER BY IF(ISNULL(t.content),0,1),t.content ASC;
-- null值显示在最后面
SELECT * FROM t_test t ORDER BY IF(ISNULL(t.content),1,0),t.content DESC;
3)将名称带有"test"的先显示,其余按照名称升序排序
在这里由于少了别名,出现报错,不过已解决
可以参考我的另一篇博客文章:https://www.cnblogs.com/HeiDi-BoKe/p/11763494.html
select * from t_test t1 where t1.content like ‘%test%‘
Union all
select * from
(select * from t_test t2 where t2.content not like ‘%test%‘ order by t2.content asc) d;
上面的方法没有把null值显示出来。另一种方法也可实现,并显示null值
select * from t_test t
order by
case
when t.content like ‘%test%‘ then 0
else 1
end,t.content asc;
4)按照id为6的排到第一位,其余按照id降序排序
select * from t_test order by decode(id, 6,1), id desc;
PS:
DECODE函数的语法:DECODE(value,if1,then1,if2,then2,if3,then3,…,else);
DECODE函数说明:表示如果value等于if1时,DECODE函数的结果返回then1,…,如果不等于任何一个if值,则返回else。
sign函数语法:sign(n);
sign函数说明:取数字n的符号,大于0返回1,小于0返回-1,等于0返回0(n可以是表达式,(n-200))。
参考网址:https://blog.csdn.net/tian_tian2/article/details/80816275
【Oracle命令】sql语句之排序(order by)
标签:sdn 处理 image 集合 column pos 没有 upload like
本文系统来源:https://www.cnblogs.com/HeiDi-BoKe/p/11763776.html
内容总结
以上是互联网集市为您收集整理的【Oracle命令】sql语句之排序(order by)全部内容,希望文章能够帮你解决【Oracle命令】sql语句之排序(order by)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。