现在的位置: 首页 > 综合 > 正文

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

2014年12月10日 ⁄ 综合 ⁄ 共 5244字 ⁄ 字号 评论关闭

查询结果的排序 

显示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代码

  1. SELECT ename, sal FROM emp ORDER BY sal;  

SELECT ename, sal FROM emp ORDER BY sal;
执行结果为: 
Sql代码

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

ENAME SAL ------------- -------------------- SMITH 800 JAMES 950
注意:若省略ASC和DESC,则默认为ASC,即升序排序。 
2.降序排序 
【训练2】 查询雇员姓名和雇佣日期,并按雇佣日期排序,后雇佣的先显示。 
输入并执行查询: 
Sql代码

  1. SELECT ename,hiredate FROM emp ORDER BY hiredate DESC;  

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  

ENAME HIREDATE ------------- ----------------------- ADAMS 23-5月 -87 SCOTT 19-4月 -87MILLER 23-1月 -82 JAMES 03-12月-81 FORD
03-12月-81

注意: DESC表示降序排序,不能省略。 
3.多列排序 
可以按多列进行排序,先按第一列,然后按第二列、第三列......。 
【训练3】 查询雇员信息,先按部门从小到大排序,再按雇佣时间的先后排序。 
输入并执行查询: 
Sql代码

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

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  

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】 按工资和工作月份的乘积排序。 
输入并执行查询: 
Sql代码

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

SELECT empno, ename, sal*Months_between(sysdate,hiredate) AS total FROM emp 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  

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.执行以下查询,表头的显示为: 
    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;  

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表的内容执行下列查询语句,出现在第一行上的人是: 
Sql代码

  1. 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.执行以下语句后,正确的结论是: 
Sql代码

  1. 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.执行以下语句出错的行是: 
      Sql代码

  1. SELECT deptno,max(sal) FROM emp   
  2.              WHERE job IN('CLERK','SALEMAN','ANALYST')   
  3.              GROUP BY deptno   
  4.               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.执行以下语句出错的行是: 
Sql代码

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

SELECT deptno,max(avg(sal)) FROM emp WHERE sal>1000 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;  

SELECT deptno,dname,ename,sal FROM emp,deptWHERE emp.deptno=dept.deptnoAND 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;  

SELECT deptno, max(sal)FROM empGROUP BY deptnoWHERE 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;  

SELECT ename,sal FROM emp 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;  

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中不出现的雇员职务

抱歉!评论已关闭.