1. 按单个字段排序

升序:ORDER BY ASC(默认)

降序:ORDER BY DESC

以指定的次序返回查询结果实际提取数据或生成报表时,一般都要根据一定的顺序查看,比如,想查看单位所雇员工的信息。

SELECT empno, ename, hiredate FROM emp WHERE deptno = 10 ORDER BY hiredate ASC;

给查询结果排序这种语句很多人都会写,但除了“ORDER BY hiredate ASC”这种写法外,还可以写成“ ORDER BY 3 ASC”,意思是按第三列排序。

SELECT empno, ename, hiredate FROM emp WHERE deptno = 10 ORDER BY 3 ASC;

当取值不定时,用这种方法就很方便,需要注意的是,

用数据来代替列位置只能用于 order by子句中,其他地方都不能用

2. 按多个字段排序

如果按多列排序且有升有降怎么办?如:按部门编号升序,并按工资降序排列排序时有两个关键字:ASC表示升序、DESC表示降序所以我们在 order by后加两列,并分别标明ASC、DESC。

SELECT empno, deptno, sal, ename, job FROM emp ORDER BY 2 ASC, 3 DESC;

下面用图的形式进行介绍,如下图所示,多列排序时,若前面的列有重复值(如deptno = 10有3行数据),后面的排序才有用。相当于是通过前面的列把数据分成了几组,然后每组的数据再按后面的列进行排序。

3. 按子串排序

按子串排序有一种速査法就是按顾客电话号码尾号的顺序记录,这样在查找的时候就可以快速缩小査询范围,增强顾客的认可度。如果要按这种方法排序,应该怎么做呢?通过函数取出后面几位所需的信息即可。

SELECT last_name AS 名称,phone_number AS 号码,salary as 工资,substr(phone_number, -4) AS 尾号FROM hr.employeesWHERE rownum < 5ORDER BY 4;

由此可见:只要能将数据査询出来,就能根据相应的信息排序。

4. TRANSLATE

语法格式:TRANSLATE(expr, from_string, to_string)

示例如下:

SELECT TRANSLATE( 'ab 你好 bcadefg', 'abcdefg', '1234567' ) AS NEW_STR FROM DUAL;

from_string与to_string以字符为单位,对应字符一一替换。

如果 to_string为空,则返回空值

SELECT TRANSLATE( 'ab 你好 bcadefg', 'abcdefg', '' ) AS NEW_STR FROM DUAL;

如果 to_string对应的位置没有字符,删除 from_string中列出的字符将会被消掉。

SELECT TRANSLATE( 'ab 你好 bcadefg', '1abcdefg', '1' ) AS NEW_STR FROM DUAL;

5. 按数字和字母混合字符串中的字母排序

首先创建VIEW如下:

CREATE OR REPLACE VIEW V
as
SELECT empno || ' ' || ename AS data FROM emp;
select * from V;

这个需求就难一点了,看到里面的字母(也就是原来的列 ename)吗?要求按其中的字母(列 ename)排序。

那么就要先取出其中的字母才行,我们可以用 translate的替换功能,把数字与空格都替换为空:

SELECt data, translate (data, '- 0123456789', '-' )AS enameFROM vORDER BY 2;

6. 处理排序空值

Oracle默认排序空值在后面,如果想把空值(如emp.comm)显示在前面怎么办,用NVL(comm,-1)吗?

SELECT ename, sal, comm, nvl(comm, - 1) order_col FROM emp ORDER BY 4;

也许很多人都是用的这种方法,但这种方法需要对列类型及其中保存的数据有所了解才行,而且保存的数据如果有变化,该语句就要重新维护。
其实可以用关键字 NULLS FIRST和 NULLS LAST。

空值在前

SELECT ename, sal, comm FROM emp ORDER BY 3 NULLS FIRST;

空值在后

SELECT ename, sal, comm FROM emp ORDER BY 3 NULLS LAST;

是不是要方便得多?

7. 根据条件取不同列中的值来排序

有时排序的要求会比较复杂,比如:领导对工资在1000到2000元之间的员工更感兴趣,于是要求工资在这个范围的员工要排在前面,以便优先査看。
对于这种需求,我们可以在查询中新生成一列,用多列排序的方法处理:

SELECT empno AS 编码,ename AS 姓名,CASEWHEN sal > 1000 AND sal < 2000 THEN1ELSE2END AS 级别,sal AS工资FROM empWHERE deptno = 30ORDER BY 3, 4;

可以看到,950与2850都排在了后面,也可以不显示级别,直接把 case when放在order by中

SELECT empno AS 编码, ename AS 姓名, sal AS工资FROM empWHERE deptno = 30ORDER BY CASEWHEN sal >= 1000 AND sal < 2000 THEN1ElSE2END,3;

ORACLE ORDER BY的多种排序相关推荐

  1. oracle菜鸟学习之 分析函数-排序

    oracle菜鸟学习之 分析函数-排序 排序函数 1.row_number:返回连续的排序,无论值是否相等 2.rank:具有相等值得行排序相同,序数值随后跳跃 3.dense_rank:具有相等值得 ...

  2. oracle orber by,Oracle ORDER BY子句

    本文概述 在Oracle中, ORDER BY子句用于对结果集中的记录进行排序或重新排列. ORDER BY子句仅与SELECT语句一起使用. 句法: SELECT expressions FROM ...

  3. ORACLE ORDER BY用法总结

    今天在逛论坛的时候看到shiyiwan同学写了一个很简单的语句,可是order by后面的形式却比较新颖(对于我来说哦),以前从来没看过这种用法,就想记下来,正好总结一下ORDER BY的知识. 1. ...

  4. oracle+sql+按中文拼音排序,Oracle 中文字段进行排序的sql语句

    Oracle 中文字段进行排序的sql语句 1)按笔画排序 select * from Table order by nlssort(columnName,'NLS_SORT=SCHINESE_STR ...

  5. oracle 排序的分析函数,oracle菜鸟学习之 分析函数-排序

    oracle菜鸟学习之 分析函数-排序 排序函数 1.row_number:返回连续的排序,无论值是否相等 2.rank:具有相等值得行排序相同,序数值随后跳跃 3.dense_rank:具有相等值得 ...

  6. oracle中按数字大小排序函数,oracle中分组排序函数用法

    项目开发中,我们有时会碰到需要分组排序来解决问题的情况,如: 1.要求取出按field1分组后,并在每组中按照field2排序:2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的 ...

  7. oracle order by 指定顺序---decode函数

    ORDER BY 用法 --指定排序 SQL语句中 order by 可以按照指定的顺序排序否 比如 记录中 某字段值 NCH HCH ACS TWN.... ORDER BY DECODE(col, ...

  8. oracle 条件查询加排序,Java乔晓松-oracle的条件查询和排序查询

    在查询中过滤行 过滤 使用 WHERE 子句,将不满足条件的行过滤掉. SELECT *|{[DISTINCT] column|expression [alias],...} FROM    tabl ...

  9. 6-23 sdust-Java-可实现多种排序的Book类 (20 分)

    6-23 sdust-Java-可实现多种排序的Book类 (20 分) 设计Book类,要求:1)Book类的成员属性包括:书名name(String类型).出版日期publishDate(Date ...

最新文章

  1. 从paxos到raft zab,为何raft能够“独领风骚”
  2. springboot 成员变量_springboot系列之04-提高开发效率必备工具lombok
  3. dede php可以传多个参数,织梦分页标签dede:pagelist传参数
  4. web前端java script学习2017.7.11
  5. 邀请参加活动的邀请函_圣诞节点灯仪式活动邀请函制作
  6. 微信小程序家庭记账本开发进度二
  7. 设定自动获得DNS服务器地址
  8. 使用idea编写代码作为生产者,Kafka接收其发来的信息【小案例】(一)
  9. 最详细的linux下的磁盘分区及格式化
  10. nssl1447-小智的糖果【dp】
  11. 想申请AI方向硕、博,这个内容一定要提前准备!!
  12. 重构javascript_JavaScript代码清理:如何重构以使用类
  13. android版 点击下载,自动点击器最新版
  14. 在Eclipse里自动导入相应包的类名的快捷键
  15. 掌握这几个 Java 性能调优技巧,95%的面试必问的Java性能调优知识点,
  16. 时间片轮转调度算法模拟C语言
  17. 将Excel文件数据导入到Oracle
  18. 微型计算机1G指的是1024字节,孙闻:1GB的流量等于多少mb
  19. 两年工作经验,离职了...
  20. 教你一招,免费拆分pdf

热门文章

  1. stm8L051低功耗采集电池电量ADC例程
  2. Html5 文件上传
  3. python--绘制WRF模式近地面风场以及辐射
  4. Linux移动光标指令hkjl,使用 HPC Pack 在 Linux VM 上執行 OpenFOAM - Azure Virtual Machines | Microsoft Docs...
  5. 安兔兔 android 4.4,适配智能电视 安兔兔评测V4.4.3发布
  6. ADAMS-Simulink联合仿真-零基础(一)
  7. 32位linux装64位rpm包,360浏览器提供rpm包(支持MIPS64)及32位deb包(兆芯)
  8. java单书号表示什么_单书号和双书号有何区别?
  9. 二、JSP常用小知识之http 403错误
  10. Python生成excel表格并设置样式