查询排序(1)

Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645

前面介绍了在 SQL 限定查询中 WHERE 子句的运行顺序优先于 SELECT 子句,WHERE 子句确定数据行,SELECT 子句确定数据列。

也分别讲述了在 WHERE 子句中常用的运算符号以及关系逻辑运算 BETWEEN … AND、IN、IS NULL、LIKE 的使用方法

在默认情况下进行数据查询的时候,SQL 限定查询会按照自然顺序进行数据的排列。

例如,查询数据表 emp

SQL> select * from emp;

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7369 SMITH                CLERK                    7902 17-12月-80            800                    20
      7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300         30
      7521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500         30
      7566 JONES                MANAGER                  7839 02-4月 -81           2975                    20
      7654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400         30
      7698 BLAKE                MANAGER                  7839 01-5月 -81           2850                    30
      7782 CLARK                MANAGER                  7839 09-6月 -81           2450                    10
      7839 KING                 PRESIDENT                     17-11月-81           5000                    10
      7844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0         30
      7900 JAMES                CLERK                    7698 03-12月-81            950                    30
      7902 FORD                 ANALYST                  7566 03-12月-81           3000                    20

自然顺序是不可控的,所以往往需要由用户自己来进行排序操作

那么这个时候就可以使用 order by 子句,而此时的 SQL 语法结构就变为了如下形式

得出一条结论:

●  确定数据来源: form表名称

●  筛选数据行: [where限定条件 (s)]。

●  选出所需要的数据列: select [distinct] * | 列, 列, 列…

●  数据排序: [order by 排序字段 [asc| desc] , 排序字段 [asc| desc] , ...] 

既然 ORDER BY 是在 SELECT 子句之后运行,那么就意味着 ORDER BY 可以使用 SELECT 子句定 义的别名

但是对于字段排序有两种形式

●  升序: ASC,默认不写排序也是升序

●  降序: DESC,由高到低进行排序 

1.按照工资由高到低排序

SQL> select *
  2  from emp
  3  order by sal desc;

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      8989 HELLO
      7839 KING                 PRESIDENT                     17-11月-81           5000                    10
      7902 FORD                 ANALYST                  7566 03-12月-81           3000                    20
      7566 JONES                MANAGER                  7839 02-4月 -81           2975                    20
      7698 BLAKE                MANAGER                  7839 01-5月 -81           2850                    30
      7782 CLARK                MANAGER                  7839 09-6月 -81           2450                    10
      7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300         30
      7844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0         30
      7934 MILLER               CLERK                    7782 23-1月 -82           1300                    10
      7521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500         30
      7654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400         30

 排序可以在任意数据类型上进行,字符串、日期都可以

2.按照雇佣日期由早到晚排序

SQL> select *
  2  from emp
  3  order by hiredate asc;

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7369 SMITH                CLERK                    7902 17-12月-80            800                    20
      7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300         30
      7521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500         30
      7566 JONES                MANAGER                  7839 02-4月 -81           2975                    20
      7698 BLAKE                MANAGER                  7839 01-5月 -81           2850                    30
      7782 CLARK                MANAGER                  7839 09-6月 -81           2450                    10
      7844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0         30
      7654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400         30
      7839 KING                 PRESIDENT                     17-11月-81           5000                    10
      7900 JAMES                CLERK                    7698 03-12月-81            950                    30
      7902 FORD                 ANALYST                  7566 03-12月-81           3000                    20

可以发现数据按照 hiredate 由远到近进行排列显示,如果想时间顺序由近到 远排序,则可以使用“SELECT * FROM emp ORDER BY hiredate” 语句

除了可以进行单一字段的排序,也可以进行字段的混合排序操作。也就是说可以进行若干个字段的排序

3.按照工资由高到低排序(降序),如果工资相同,则按照雇佣日期由早到晚排序(升序)

SQL> select *
  2  from emp
  3  order by sal desc,hiredate;

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      8989 HELLO
      7839 KING                 PRESIDENT                     17-11月-81           5000                    10
      7902 FORD                 ANALYST                  7566 03-12月-81           3000                    20
      7566 JONES                MANAGER                  7839 02-4月 -81           2975                    20
      7698 BLAKE                MANAGER                  7839 01-5月 -81           2850                    30
      7782 CLARK                MANAGER                  7839 09-6月 -81           2450                    10
      7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300         30
      7844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0         30
      7934 MILLER               CLERK                    7782 23-1月 -82           1300                    10
      7521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500         30
      7654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400         30

4.查询所有办事员的编号、职位、年薪,按照年薪由高到低排序

查询排序(1)_第1张图片

你可能感兴趣的:(Oracle从小白到总裁,oracle,数据库,sql)