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 207499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 307521 WARD SALESMAN 7698 22-2月 -81 1250 500 307566 JONES MANAGER 7839 02-4月 -81 2975 207654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 307698 BLAKE MANAGER 7839 01-5月 -81 2850 307782 CLARK MANAGER 7839 09-6月 -81 2450 107839 KING PRESIDENT 17-11月-81 5000 107844 TURNER SALESMAN 7698 08-9月 -81 1500 0 307900 JAMES CLERK 7698 03-12月-81 950 307902 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 emp3 order by sal desc;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------8989 HELLO7839 KING PRESIDENT 17-11月-81 5000 107902 FORD ANALYST 7566 03-12月-81 3000 207566 JONES MANAGER 7839 02-4月 -81 2975 207698 BLAKE MANAGER 7839 01-5月 -81 2850 307782 CLARK MANAGER 7839 09-6月 -81 2450 107499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 307844 TURNER SALESMAN 7698 08-9月 -81 1500 0 307934 MILLER CLERK 7782 23-1月 -82 1300 107521 WARD SALESMAN 7698 22-2月 -81 1250 500 307654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
排序可以在任意数据类型上进行,字符串、日期都可以
2.按照雇佣日期由早到晚排序
SQL> select *2 from emp3 order by hiredate asc;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------7369 SMITH CLERK 7902 17-12月-80 800 207499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 307521 WARD SALESMAN 7698 22-2月 -81 1250 500 307566 JONES MANAGER 7839 02-4月 -81 2975 207698 BLAKE MANAGER 7839 01-5月 -81 2850 307782 CLARK MANAGER 7839 09-6月 -81 2450 107844 TURNER SALESMAN 7698 08-9月 -81 1500 0 307654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 307839 KING PRESIDENT 17-11月-81 5000 107900 JAMES CLERK 7698 03-12月-81 950 307902 FORD ANALYST 7566 03-12月-81 3000 20
可以发现数据按照 hiredate 由远到近进行排列显示,如果想时间顺序由近到 远排序,则可以使用“SELECT * FROM emp ORDER BY hiredate” 语句
除了可以进行单一字段的排序,也可以进行字段的混合排序操作。也就是说可以进行若干个字段的排序
3.按照工资由高到低排序(降序),如果工资相同,则按照雇佣日期由早到晚排序(升序)
SQL> select *2 from emp3 order by sal desc,hiredate;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------8989 HELLO7839 KING PRESIDENT 17-11月-81 5000 107902 FORD ANALYST 7566 03-12月-81 3000 207566 JONES MANAGER 7839 02-4月 -81 2975 207698 BLAKE MANAGER 7839 01-5月 -81 2850 307782 CLARK MANAGER 7839 09-6月 -81 2450 107499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 307844 TURNER SALESMAN 7698 08-9月 -81 1500 0 307934 MILLER CLERK 7782 23-1月 -82 1300 107521 WARD SALESMAN 7698 22-2月 -81 1250 500 307654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
4.查询所有办事员的编号、职位、年薪,按照年薪由高到低排序