mysql与oracle的升序与降序_【Oracle命令】sql语句之排序(order by)

通过对数据库数据进行降序排序来达到显示最新数据在前面的效果

--降序排序(最新的显示在前面)

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"

fromemp

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 BYt.content;--按名称升序

SELECT * FROM t_test t ORDER BY t.content ASC;

20191030120113448343.png

--按名称降序

SELECT * FROM t_test t ORDER BY t.content DESC

20191030120113683703.png

--名称相同的按id降序(将最新的排序)。这里我新添加了一条数据test4

SELECT * FROM t_test t ORDER BY t.content DESC,t.id DESC;

20191030120113868281.png

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 ASCNULLS 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"的先显示,其余按照名称升序排序

在这里由于少了别名,出现报错,不过已解决

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 * fromt_test torder by

case

when t.content like ‘%test%‘ then 0

else 1

end,t.content asc;

20191030120114017701.png

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))。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值