1、asc:升序排列(默认排序),及从小到大排列;若值相同,按oracle内置的校验规则排序。
例:查询员工信息(编号、姓名、月薪、年薪),按月薪升序排序:
select empno,emame,sal,sal*12
from emp
order by sal asc;
2、desc降序,及从大到小排序。
例:查询员工信息(编号、姓名、月薪、年薪),按月薪降序排序:
select empno,emame,sal,sal*12
from emp
order by sal desc;
3、排序不仅数值型可以,日期型也可以进行排序;日期型的降序是年近者在前,升序则相反;
例:查询员工信息,按入职日期降序排序:
select empno,ename,sal,hiredate,sal*12 "年薪"
from emp
order by hiredate desc;
4、order_by后面不仅可以跟字段名,还可以跟列名、别名、表达式、列号(从1开始,在select子句后的第一列为1,以此类推)
(1)列名:
例:查询员工信息,按入职日期降序排序:
select empno,ename,sal,hiredate,sal*12 "年薪"
from emp
order by hiredate desc;
(2)别名:
例:
查询员工信息,按年薪降序排序:
select empno,ename,sal,hiredate,sal*12 "年薪"
from emp
order by “年薪” desc;
(3)表达式:
例:
查询员工信息,按年薪降序排序:
select empno,ename,sal,hiredate,sal*12 "年薪"
from emp
order by
sal*12 desc;
(4)列号:
例:
查询员工信息,按年薪降序排序:
select empno,ename,sal,hiredate,sal*12 "年薪"
from emp
order by
5 desc;
解析:从select开始数,empno为1,ename为2,年薪则为5
4、
注意:排序中,oracle将null看成最大值。
5、
注意order by和where同时出现时,order by要在最后。
例:查询员工信息,按佣金降序排列:
select *
from emp
where comm is not null
order by comn desc;
6、若order by后跟多个字段排序,只有第一个字段值相同时,第二个排序才生效。
例:查询员工信息,按工资降序排列,相同工资按员工入职时间降序排列:
select *
from emp
order by sal desc,hiredate desc;
解析:只有当sal desc排序后,sal的值相同时,相同的值会按照hiredate desc进行排序。
7、综合练习select子句、where子句、order by子句:
例:查询20号部门,且工资大于1500,按入职时间降序排序:
select *
from emp
where (deptno=20) and (dal>1500)
order by hiredate desc;