zoukankan      html  css  js  c++  java
  • Oracle查询排序asc/desc 多列 order by

    查询结果的排序

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

    Sql代码
    1. SELECT 字段列表 FROM 表名 WHERE 条件   
    2.         ORDER BY 字段名1 [ASC|DESC][,字段名2 [ASC|DESC]...];  
    1. SELECT 字段列表 FROM 表名 WHERE 条件  
    2.   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;  
    1. SELECT ename, sal FROM emp ORDER BY sal;  


    执行结果为:

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


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

    Sql代码
    1. SELECT ename,hiredate FROM emp ORDER BY hiredate DESC;  
    1. 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  
    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代码
    1. SELECT ename,deptno,hiredate FROM emp ORDER BY deptno,hiredate;  
    1. 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  
    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;  
    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  
    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  
    1. 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;  
    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代码
    1. SELECT ename FROM emp WHERE deptno=10 ORDER BY sal DESC;  
    1. 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  
    1. 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;  
    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;  
    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;  
    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;  
    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;  
    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;  
    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中不出现的雇员职务

  • 相关阅读:
    MVC4数据访问EF查询linq语句的时候报错找不到表名问题
    以下各节已定义,但尚未为布局页“~/Views/Shared/_Layout.cshtml”呈现:“Scripts”。
    将函数实现放在头文件中
    const 不兼容的类型限定符问题
    Ubuntu 16.04重装后grub rescue> 终端模式修复方法
    Ubuntu 16.04 编译VTK7.1
    区域生长算法的一种C++实现
    Win7 U盘安装Ubuntu16.04 双系统
    Win7、Ubuntu双系统卸载Ubuntu系统
    AES加密补位填充的一个问题
  • 原文地址:https://www.cnblogs.com/stsinghua/p/6409576.html
Copyright © 2011-2022 走看看