Oracle 数据库查询排序
- 什么叫查询排序呢?
- 在SQL定义的过程之中,默认情况下都是根据ID进行排序,也就是说如果现在要进行查询的时候,在Oracle中会根据数据的创建时间,以及各个因素实现排序处理(每个数据库都不一样)。
那么如果要进行指定字段的排序,例如:工资、雇用日期等等,这个时候就可以采用ORDER BY子句完成处理。那么此时的SQL语句格式如下:
- 在SQL定义的过程之中,默认情况下都是根据ID进行排序,也就是说如果现在要进行查询的时候,在Oracle中会根据数据的创建时间,以及各个因素实现排序处理(每个数据库都不一样)。
第三步:SELECT [DISTINCT] * | 列名称 [别名],列名称[别名],... | 数据计算
第一步:FROM 数据表 [别名]
第二步:[WHERE 限定条件(s)]
第四步:[ORDER BY 排序字段 [ASC | DESC],排序字段 [ASC | DESC],...];
之所以强调执行顺序是由原因的,就比如SELECT定义的别名WHERE不能够使用,因为WHERE在SELECT之前执行。但是ORDER BY子句可以使用,因为ORDER BY子句在SELECT之后执行。
之所以强调执行顺序,就是因为别名的问题。
在进行排序的时候,有两种排序模式
- ASC:升序,如果不编写排序模式,则默认为此模式;
- DESC:降序。
语法:
SELECT * FROM emp ORDER BY sal;
写与不写现在sal数据列的排序就是升序的。
SELECT * FROM emp ORDER BY sal ASC;
SELECT * FROM emp ORDER BY sal DESC;
范例:查询所有雇员信息,要求按照工资由高到低,如果工资相同,则按照雇佣日期,由早到晚排序。(此时一定设置的是多个排序条件)
SELECT * FROM emp ORDER BY sal DESC , hiredate ASC;
范例:也可以进行数据筛选后排序即WHERE后查询。
ORDER BY 可以使用SELECT的别名。
范例:查询每个雇员的编号,姓名,年薪,并且按照年薪由高到低排序。
SELECT empno , ename,sal*12 income FROM emp ORDER BY income DESC;
ORDER BY 永远都在最后执行, 也就是说排序是在所有数据都进行筛选完毕后再进行处理。