Oracle:order_by子句

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;

猜你喜欢

转载自blog.csdn.net/weixin_41113108/article/details/80273208