[color=red]查询结果的排序[/color] 
显示EMP表中不同的部门编号。 
 如果要在查询的同时排序显示结果,可以使用如下的语句: 
SELECT 字段列表 FROM 表名 WHERE 条件
		ORDER BY 字段名1 [ASC|DESC][,字段名2 [ASC|DESC]...]; 
ORDER BY从句后跟要排序的列。ORDER BY 从句出现在SELECT语句的最后。 
 排序有升序和降序之分,ASC表示升序排序,DESC表示降序排序。如果不指明排序顺序,[color=red]默认的排序顺序为升序ASC[/color]。如果要降序,必须书写DESC关键字 
1.升序排序  
 【训练1】 查询雇员姓名和工资,并按工资从小到大排序。 
 输入并执行查询: 
SELECT ename, sal FROM emp ORDER BY sal; 
 执行结果为: 
ENAME            SAL
		------------- --------------------
		SMITH             800
		JAMES             950 
 注意:若省略ASC和DESC,则默认为ASC,即升序排序。 
2.降序排序  
 【训练2】 查询雇员姓名和雇佣日期,并按雇佣日期排序,后雇佣的先显示。 
 输入并执行查询: 
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 
 注意: DESC表示降序排序,不能省略。 
 [color=red]3.多列排序[/color] 
 可以按多列进行排序,先按第一列,然后按第二列、第三列......。 
 【训练3】 查询雇员信息,先按部门从小到大排序,再按雇佣时间的先后排序。 
 输入并执行查询: 
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 
 说明:该排序是先按部门升序排序,部门相同的情况下,再按雇佣时间升序排序。 
4.在排序中使用别名 
 如果要对计算列排序,可以为计算列指定别名,然后按别名排序。 
 【训练4】 按工资和工作月份的乘积排序。 
 输入并执行查询: 
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 
sysdate获取当前日期。 
[color=red]练习题:[/color] 
1.SQL语言中用来创建、删除及修改数据库对象的部分被称为: 
 A. 数据库控制语言(DCL) 
 B. 数据库定义语言(DDL) 
 C. 数据库操纵语言(DML) 
 D. 数据库事务处理语言 
2.执行以下查询,表头的显示为: 
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; 
A. 两个查询结果完全相同 
 B. 两个查询结果不相同 
 C. 第一个查询正确,第二个查询错误 
 D. 第二个查询正确,第一个查询错误 
 4.参考本章的emp表的内容执行下列查询语句,出现在第一行上的人是: 
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 
 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; 
 A. 第一行 B. 第二行 
 C. 第三行 D. 第四行 
8.执行以下语句出错的行是: 
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; 
A. 第一行 B. 第二行 
C. 第三行 D. 第四行 
10. 以下语句出错,哪种改动能够正确执行: 
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; 
 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; 
 A. 显示部门10的雇员职务和20的雇员职务 
 B. 显示部门10和部门20共同的雇员职务 
 C. 显示部门10和部门20不同的雇员职务 
 D. 显示在部门10中出现,在部门20中不出现的雇员职务 
黑色头发:http://heisetoufa.iteye.com/
                










