转自:oracle查询排序asc/desc 多列 order by
查询结果的排序
显示EMP表中不同的部门编号。
如果要在查询的同时排序显示结果,可以使用如下的语句:
SELECT 字段列表 FROM 表名 WHERE 条件 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】 查询雇员姓名和工资,并按工资从小到大排序。
输入并执行查询:
SELECT ename, sal FROM emp ORDER BY sal;
SELECT ename, sal FROM emp ORDER BY sal;
执行结果为:
ENAME SAL SMITH 800 JAMES 950
ENAME SAL SMITH 800 JAMES 950
注意:若省略ASC和DESC,则默认为ASC,即升序排序。
2.降序排序
【训练2】 查询雇员姓名和雇佣日期,并按雇佣日期排序,后雇佣的先显示。
输入并执行查询:
SELECT ename,hiredate FROM emp ORDER BY hiredate DESC ;
SELECT ename,hiredate FROM emp ORDER BY hiredate DESC ;
结果如下:
ENAME HIREDATE ADAMS 23-5月 -87 SCOTT 19-4月 -87 MILLER 23-1月 -82 JAMES 03-12月-81 FORD 03-12月-81
ENAME HIREDATE ADAMS 23-5月 -87 SCOTT 19-4月 -87 MILLER 23-1月 -82 JAMES 03-12月-81 FORD 03-12月-81
注意: DESC表示降序排序,不能省略。
3.多列排序
可以按多列进行排序,先按第一列,然后按第二列、第三列......。
【训练3】 查询雇员信息,先按部门从小到大排序,再按雇佣时间的先后排序。
输入并执行查询:
SELECT ename,deptno,hiredate FROM emp ORDER BY deptno,hiredate;
SELECT ename,deptno,hiredate FROM emp ORDER BY deptno,hiredate;
结果如下:
ENAME DEPTNO HIREDATE CLARK 10 09-6月 -81 KING 10 17-11月-81 MILLER 10 23-1月 -82 SMITH 20 17-12月-80 JONES 20 02-4月 -81 FORD 20 03-12月-81 SCOTT 20 19-4月 -87
ENAME DEPTNO HIREDATE CLARK 10 09-6月 -81 KING 10 17-11月-81 MILLER 10 23-1月 -82 SMITH 20 17-12月-80 JONES 20 02-4月 -81 FORD 20 03-12月-81 SCOTT 20 19-4月 -87
说明:该排序是先按部门升序排序,部门相同的情况下,再按雇佣时间升序排序。
4.在排序中使用别名
如果要对计算列排序,可以为计算列指定别名,然后按别名排序。
【训练4】 按工资和工作月份的乘积排序。
输入并执行查询:
SELECT empno, ename, sal*Months_between(sysdate,hiredate) AS total FROM emp ORDER BY total;
SELECT empno, ename, sal*Months_between(sysdate,hiredate) AS total FROM emp ORDER BY total;
执行结果为:
EMPNO ENAME TOTAL 7876 ADAMS 221526.006 7369 SMITH 222864.661 7900 JAMES 253680.817 7654 MARTIN 336532.484
EMPNO ENAME TOTAL 7876 ADAMS 221526.006 7369 SMITH 222864.661 7900 JAMES 253680.817 7654 MARTIN 336532.484
sysdate获取当前日期。
练习题:
1.SQL语言中用来创建、删除及修改数据库对象的部分被称为:
A. 数据库控制语言(DCL)
B. 数据库定义语言(DDL)
C. 数据库操纵语言(DML)
D. 数据库事务处理语言
2.执行以下查询,表头的显示为:
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.执行如下两个查询,结果为:
SELECT ename name ,sal salary FROM emp order by salary; SELECT ename name ,sal "SALARY" FROM emp order by sal ASC ;
SELECT ename name ,sal salary FROM emp order by salary; SELECT ename name ,sal "SALARY" FROM emp order by sal ASC ;
A. 两个查询结果完全相同
B. 两个查询结果不相同
C. 第一个查询正确,第二个查询错误
D. 第二个查询正确,第一个查询错误
4.参考本章的emp表的内容执行下列查询语句,出现在第一行上的人是:
SELECT ename FROM emp WHERE deptno=10 ORDER BY sal DESC ;
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.执行以下语句后,正确的结论是:
SELECT empno,ename FROM emp WHERE hiredate<to_date( '04-11月-1980' )-100
SELECT empno,ename FROM emp WHERE hiredate<to_date( '04-11月-1980' )-100
A. 显示给定日期后100天以内雇佣的雇员信息
B. 显示给定日期前100天以内雇佣的雇员信息
C. 显示给定日期100天以后雇佣的雇员信息
D. 显示给定日期100天以前雇佣的雇员信息
7.执行以下语句出错的行是:
SELECT deptno, max (sal) FROM emp WHERE job IN ( 'CLERK' , 'SALEMAN' , 'ANALYST' ) GROUP BY deptno HAVING sal>1500;
SELECT deptno, max (sal) FROM emp WHERE job IN ( 'CLERK' , 'SALEMAN' , 'ANALYST' ) GROUP BY deptno HAVING sal>1500;
A. 第一行 B. 第二行
C. 第三行 D. 第四行
8.执行以下语句出错的行是:
SELECT deptno, max ( avg (sal)) FROM emp WHERE sal>1000 Group by deptno;
SELECT deptno, max ( avg (sal)) FROM emp WHERE sal>1000 Group by deptno;
A. 第一行 B. 第二行
C. 第三行 D. 第四行
9.执行以下语句出错的行是:
SELECT deptno,dname,ename,sal FROM emp,dept WHERE emp.deptno=dept.deptno AND sal>1000;
SELECT deptno,dname,ename,sal FROM emp,dept WHERE emp.deptno=dept.deptno AND sal>1000;
A. 第一行 B. 第二行
C. 第三行 D. 第四行
10. 以下语句出错,哪种改动能够正确执行:
SELECT deptno, max (sal) FROM emp GROUP BY deptno WHERE max (sal)>2500;
SELECT deptno, max (sal) FROM emp GROUP BY deptno 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. 以下语句的作用是:
SELECT ename,sal FROM emp WHERE sal<( SELECT min (sal) FROM emp)+1000;
SELECT ename,sal FROM emp WHERE sal<( SELECT min (sal) FROM emp)+1000;
A. 显示工资低于1000元的雇员信息
B. 将雇员工资小于1000元的工资增加1000后显示
C. 显示超过最低工资1000元的雇员信息
D. 显示不超过最低工资1000元的雇员信息
12. 以下语句的作用是:
SELECT job FROM emp WHERE deptno=10 MINUS SELECT job FROM emp WHERE deptno=20;
SELECT job FROM emp WHERE deptno=10 MINUS SELECT job FROM emp WHERE deptno=20;
A. 显示部门10的雇员职务和20的雇员职务
B. 显示部门10和部门20共同的雇员职务
C. 显示部门10和部门20不同的雇员职务
D. 显示在部门10中出现,在部门20中不出现的雇员职务