oracle查询排序asc/desc 多列 order by


查询结果的排序

显示EMP表中不同的部门编号。
如果要在查询的同时排序显示结果,可以使用如下的语句:
Sql代码


1. SELECT 字段列表 FROM 表名 WHERE 条件 
2. ORDER BY 字段名1 [ASC|DESC][,字段名2 [ASC|DESC]...];

SELECT 字段列表 FROM 表名 WHERE 条件 ORDER BY 字段名1 [ASC|DESC][,字段名2 [ASC|DESC]...];


ORDER BY从句后跟要排序的列。ORDER BY 从句出现在SELECT语句的最后。


排序有升序和降序之分,ASC表示升序排序,DESC表示降序排序。如果不指明排序顺序,默认的排序顺序为升序ASC。如果要降序,必须书写DESC关键字


1.升序排序


【训练1】 查询雇员姓名和工资,并按工资从小到大排序。


输入并执行查询:


Sql代码


SELECT ename, sal FROM emp ORDER BY sal;

执行结果为:


Sql代码



1. ENAME SAL 
2. ------------- -------------------- 
3. SMITH 800 
4. JAMES 950

注意:若省略ASC和DESC,则默认为ASC,即升序排序。


2.降序排序


【训练2】 查询雇员姓名和雇佣日期,并按雇佣日期排序,后雇佣的先显示。


输入并执行查询:


Sql代码


SELECT ename,hiredate FROM emp ORDER BY hiredate DESC;


结果如下:


Sql代码



1. ENAME HIREDATE 
2. ------------- ----------------------- 
3. ADAMS 23-5月 -87 
4. SCOTT 19-4月 -87 
5. MILLER 23-1月 -82 
6. JAMES 03-12月-81 
7. FORD 03-12月-81

注意: DESC表示降序排序,不能省略。


3.多列排序


可以按多列进行排序,先按第一列,然后按第二列、第三列......。


【训练3】 查询雇员信息,先按部门从小到大排序,再按雇佣时间的先后排序。


输入并执行查询:


Sql代码


SELECT ename,deptno,hiredate FROM emp ORDER BY deptno,hiredate;


结果如下:


Sql代码

1. ENAME DEPTNO HIREDATE 
2. ---------------- ----------------- --------------- 
3. CLARK 10 09-6月 -81 
4. KING 10 17-11月-81 
5. MILLER 10 23-1月 -82 
6. SMITH 20 17-12月-80 
7. JONES 20 02-4月 -81 
8. FORD 20 03-12月-81 
9. SCOTT 20 19-4月 -87

说明:该排序是先按部门升序排序,部门相同的情况下,再按雇佣时间升序排序。


4.在排序中使用别名


如果要对计算列排序,可以为计算列指定别名,然后按别名排序。


【训练4】 按工资和工作月份的乘积排序。


输入并执行查询:


Sql代码

1. SELECT empno, ename, sal*Months_between(sysdate,hiredate) AS total FROM emp 
2. ORDER BY total;

执行结果为:


Sql代码



1. EMPNO ENAME TOTAL 
2. ------------ ------------- ---------------------- 
3. 7876 ADAMS 221526.006 
4. 7369 SMITH 222864.661 
5. 7900 JAMES 253680.817 
6. 7654 MARTIN 336532.484

sysdate获取当前日期。



练习题:



1.SQL语言中用来创建、删除及修改数据库对象的部分被称为:


A. 数据库控制语言(DCL)


B. 数据库定义语言(DDL)


C. 数据库操纵语言(DML)


D. 数据库事务处理语言



2.执行以下查询,表头的显示为:


Sql代码

1. SELECT sal "Employee Salary" FROM emp 
SELECT sal "Employee Salary" FROM emp 
   
A. EMPLOYEE SALARY B. employee salary 
   
C. Employee Salary D. "Employee Salary“


3.执行如下两个查询,结果为:


Sql代码



1. SELECT ename name,sal salary FROM emp order by salary; 
2. SELECT ename name,sal "SALARY" FROM emp order by sal ASC;

A. 两个查询结果完全相同


B. 两个查询结果不相同


C. 第一个查询正确,第二个查询错误


D. 第二个查询正确,第一个查询错误


4.参考本章的emp表的内容执行下列查询语句,出现在第一行上的人是:


Sql代码


SELECT ename FROM emp WHERE deptno=10 ORDER BY sal DESC;


A. SMITH B. KING


C. MILLER D. CLARK


5.哪个函数与||运算有相同的功能:


A. LTRIM B. CONCAT


C. SUBSTR D. INSTR


6.执行以下语句后,正确的结论是:


Sql代码

SELECT empno,ename FROM emp WHERE hiredate<to_date('04-11月-1980')-100


A. 显示给定日期后100天以内雇佣的雇员信息


B. 显示给定日期前100天以内雇佣的雇员信息


C. 显示给定日期100天以后雇佣的雇员信息


D. 显示给定日期100天以前雇佣的雇员信息


7.执行以下语句出错的行是:


Sql代码

1. SELECT deptno,max(sal) FROM emp 
2. WHERE job IN('CLERK','SALEMAN','ANALYST') 
3. GROUP BY deptno 
4. HAVING sal>1500;

A. 第一行 B. 第二行


C. 第三行 D. 第四行


8.执行以下语句出错的行是:


Sql代码



1. SELECT deptno,max(avg(sal)) 
2. FROM emp 
3. WHERE sal>1000 
4. Group by deptno;

A. 第一行 B. 第二行


C. 第三行 D. 第四行


9.执行以下语句出错的行是:


Sql代码



1. SELECT deptno,dname,ename,sal 
2. FROM emp,dept 
3. WHERE emp.deptno=dept.deptno 
4. AND sal>1000;

A. 第一行 B. 第二行


C. 第三行 D. 第四行


10. 以下语句出错,哪种改动能够正确执行:


Sql代码



1. SELECT deptno, max(sal) 
2. FROM emp 
3. GROUP BY deptno 
4. WHERE max(sal)>2500;

A. 将WHERE和GROUP BY 语句顺序调换一下


B. 将WHERE max(sal)>2500语句改成HAVING max(sal)>2500


C. 将WHERE max(sal)>2500语句改成WHERE sal>2500


D. 将WHERE max(sal)>2500语句改成HAVING sal>2500


11. 以下语句的作用是:


Sql代码



1. SELECT ename,sal FROM emp 
2. WHERE sal<(SELECT min(sal) FROM emp)+1000;

A. 显示工资低于1000元的雇员信息


B. 将雇员工资小于1000元的工资增加1000后显示


C. 显示超过最低工资1000元的雇员信息


D. 显示不超过最低工资1000元的雇员信息


12. 以下语句的作用是:


Sql代码

1. SELECT job FROM emp WHERE deptno=10 
2. MINUS 
3. SELECT job FROM emp WHERE deptno=20;

A. 显示部门10的雇员职务和20的雇员职务


B. 显示部门10和部门20共同的雇员职务


C. 显示部门10和部门20不同的雇员职务


D. 显示在部门10中出现,在部门20中不出现的雇员职务


转载于:https://blog.51cto.com/jiaoya/1131632