查询结果的排序

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

  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】 查询雇员姓名和工资,并按工资从小到大排序。
输入并执行查询:

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

执行结果为:

  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】 查询雇员姓名和雇佣日期,并按雇佣日期排序,后雇佣的先显示。
输入并执行查询:

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

结果如下:

  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】 查询雇员信息,先按部门从小到大排序,再按雇佣时间的先后排序。
输入并执行查询:

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

结果如下:

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

  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;

执行结果为:

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

  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.执行如下两个查询,结果为:

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

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

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

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

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

  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. 以下语句出错,哪种改动能够正确执行:

  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. 以下语句的作用是:

  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. 以下语句的作用是:

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

Oracle查询排序asc/desc 多列 order by的更多相关文章

  1. Map根据value排序ASC DESC

    原文:http://blog.csdn.net/k21325/article/details/53259180 需求有点刁钻,写关键词组合匹配标题的时候,遇到关键词像这样 XXX XXX 1222 X ...

  2. 注意使用 BTREE 复合索引各字段的 ASC/DESC 以优化 order by 查询效率

    tbl_direct_pos_201506 表有 190 万数据.DDL: CREATE TABLE `tbl_direct_pos_201506` ( `acq_ins_code` char(13) ...

  3. Oracle查询如何才能行转列?-sunziren

    原创文章,转载务必注明出处. 今天工作的时候,碰到一个问题,涉及oracle行转列,用了半小时解决,因此在这里写个博客记录一下解决办法. 原数据库表的数据是: 想要达到的效果是: 经过思考,这是一个o ...

  4. oracle查询排序后的前几条记录

    select * from (select * from table order by 字段名 desc) where rownum<你要查的记录条数,这样才能符合条件.

  5. Oracle查询结果中:一列中相同的值或一列中重复的值,只显示一次

    http://www.itpub.net/thread-1768915-1-1.html 问题: CREATE TABLE test(ob_id VARCHAR(32),ob_name VARCHAR ...

  6. PostgreSQL 数据库NULL值的默认排序行为与查询、索引定义规范 - nulls first\last, asc\desc

    背景 在数据库中NULL值是指UNKNOWN的值,不存储任何值,在排序时,它排在有值的行前面还是后面通过语法来指定. 例如 -- 表示null排在有值行的前面 select * from tbl or ...

  7. Oracle的排序和限制条件(order by 和where)

    1.Order by 子句的使用 select column.... from .... order by ... 1) Order by子句在整个 select语句中的位置: 始终位于最后 2) o ...

  8. MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询

    MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...

  9. mysql 数据操作 单表查询 查询排序: order by

    如果不指定排序 默认是按照id字段 从小到大排序的  升序 mysql> select * from employee; +----+------------+--------+-----+-- ...

随机推荐

  1. MySQL源码学习——DBUG调试

    一.前言 在规模稍微大点的项目中,为了方便快速找到bug的所在,我们往往需要在代码中加入一些调试用的代码,比如加入一些printf,打印出一些重点的信息:加入assert,进行断言判断.这些比较随意的 ...

  2. AngularJS系统学习之Scope(作用域)

    本文出自:https://www.w3ctech.com/topic/1611 看完了没怎么懂,  也许是和别人 原文作者: Nicolas Bhttps://www.w3ctech.com/topi ...

  3. Java全栈工程师知识体系介绍

    Java全栈工程师,是指掌握多种技能,并能利用多种技能独立完成产品的人,也叫全端工程师(同时具备前端和后台能力),英文Full Stack developer. 那么想要成为一名合格的Java全栈工程 ...

  4. 2.3-2.6 HBase java API

    一.get .put.delete.scan 1.代码 package com.beifeng.senior.hadoop.hbase; import org.apache.hadoop.conf.C ...

  5. 【Data structure & Algorithm】把二元查找树转变成排序的双向链表

    把二元查找树转变成排序的双向链表 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表,要求不能创建任何新节点,只调整指针指向. 比如将二元查找树 10 /       \ 6       ...

  6. Identity Server 4 原理和实战(完结)_单点登录实例(添加Flask客户端,Express.js的API)

    idp授权资源的添加 如果下面哪个客户端想访问api2这个资源的话 就把它写上scope里面就可以了 nodeJS的客户端 python的库 MVC客户端分别访问API和API2 python客户端演 ...

  7. E20180615-hm

    fraction  n. [数] 分数; 一小部分,些微; 不相连的一块,片段; [化] 分馏; infinity n. <数>无穷大; 无限的时间或空间; product n. 产品; ...

  8. Tarjan找桥和割点与点连通分量与边连通分量【未成形】

    之前只学了个强连通Tarjan算法,然后又摸了缩点操作: 然后今天在lightoj摸了一道模板题,是求所有桥的题: 然后发现,要把:割点,割点集合,双连通,最小割边集合(桥),点连通分量,边连通分量都 ...

  9. c# UserControl 如何在父窗口中显示Scroll

    1. UserControl 不应该是Dock = Fill, 而应该使用 Anchor 2. 父窗口(或者父控件,或者容器)的AutoScroll = True 3.UserControl 加入容器 ...

  10. bzoj 2039: [2009国家集训队]employ人员雇佣【最小割】

    一开始在https://www.cnblogs.com/lokiii/p/10770919.html基础上连(i,j,b[i][j])建了个极丑的图T掉了--把dinic换成isap勉强能卡过 首先因 ...