------chapter2给查询结果排序
--2.1以指定的次序返回查询结果  order by xxx asc/desc
select empno,ename,hiredate from emp where deptno=10
order by hiredate asc;
其中 order by hiredate asc 还可以写成 order by 3 asc,意思是按照第三列升序。
使用 order by 3 asc 比较方便,
因为如果要增加列,使用的是 order by hiredate asc 需要修改 order by 后面的字段,将hiredate更换成其他字段。
需要注意的是,用数据代替列位置只能用于 order by 子句中,其他地方不能用。
--2.2按多个字段排序  oeder by xxx asc,yyy desc;
按照多列排序且有升有降怎么办?eg.按部门编号升序,按工资降序。
关键字 asc:升序  desc:降序
所以在order by 后面加两列,并分别标明 asc,desc。
select empno,deptno,sal,ename,,job from emp 
oeder by 2 asc,3 desc;
【注意】:按照多列排序时,若前面的列有重复值,后面的排序才有用。
也就是通过前面的列把数据分成了几组,每组的数据再按照按后面的列进行排序。
--2.3按子串排序 substr
比如按照客户电话号码的尾号的顺序记录,通过函数取出后面几位所需的信息即可。
select last_name as 名称,phone_number as 号码,salary as 工资,
substr(phone_number,-4) as 尾号
from hr.emplyees
where rownum<=5
order by 4 ;--4后面不加,就默认是asc
按子串排序实际就是增加一个计算列,然后用过这个计算列来排序。
--2.4从表中随机返回n条记录 dbms_random
为了防止作假,像前面那样抽查数据和还不行,还需要随机抽查。
先用dbms_random 对数据进行随机排序,然后取其中三行,每次数据都是不一样的。
正确示例:
select empno,ename
from
(select empno,ename from emp order by dbms_random.value())
where rownnum<=3;

错误示例:
select * from
(select empno,ename from emp where rownumm<=3 order by dbms_random.value)
order by 1;

查询语句的执行顺序:1.select 2.rownum 3.order by
也就是说,先取出数据,然后生成序号,最后才是排序

正确的写法是:先随机排序,再取数据
错误的写法是:先取数据,再随机排序
--2.5translate
语法格式:translate(expr,from_string,to_string)
示例:select translate('ab 你好 bcdefg','abcdefg','1234567') as new_str from dual;--12 你好 234567

from_string 与 to_string以字符为单位,对应字符一一替换。
replace('a','1') 
如果to_string为空,则返回空值。
select translate('ab 你好 bcdefg','abcdefg','') as new_str from dual;--空
to_string对应的位置没有字符,则from_string中的列出的字符将会被消掉。
select translate('ab 你好 bcdefg','1abcdefg','1') as new_str from dual;-- 你好 
过程:1->1,a->空,b->空,c->空,d->空,e->空,f->空,g->空
--2.6按数字和字母混合字符串中的字母排序 translate
首先创建view:
create or replace view v2_6
as
select empno || '' ||ename as date from emp;--结果例如:7369 smith
按照其中的字母排序,那就要先取出其中的字母才行,我们可以用translate的替换功能,
把数字与空格都替换为空
select date,translate(date,'- 0123456789','-') as ename from v2_6 order by 2;
--2.7处理排序空值
oracle默认升序,默认空值在后,降序空值在前
select ename,mgr from emp where deptno=10 order bby mgr asc;--空值在最后
select ename,mgr from emp where deptno=10 order bby mgr desc;--空值在前面

想要更改空值的顺序,可以使用关键字 nulls first 和 nulls last
order by xxx asc nulls first;
order by xxx desc nulls last;
--2.8根据条件取不同列的值来排序 case when
比如:领导对工资在1000到2000之间的员工更感兴趣,要排在前面,以便优先查看。
对于这种需求,可以在查询中新生成1列,用多列排序的方法处理。
select empno as 编码,ename as 姓名,
case when sal>=1000 andd sal<=2000 then 1 else 2 end as 级别,
sal as 工资
from emp where deptno=30
order by 3,4;--升序,3相同时,4进行排序升序
----
也可以不显示级别
select empno as 编号,ename as 姓名,sal as 工资
from emp where deptno=30
order by case when sal>=1000 and sal<=2000 then  1 else 2 end,3;

Oracle查询优化改写2.0 第二章:给查询结果排序相关推荐

  1. 【书评:Oracle查询优化改写】第14章 结尾章

    [书评:Oracle查询优化改写]第14章 结尾章 一.1  相关参考文章链接 前13章的链接参考相关连接: [书评:Oracle查询优化改写]第一章 http://blog.itpub.net/26 ...

  2. 【书评:Oracle查询优化改写】第三章

    [书评:Oracle查询优化改写]第三章 BLOG文档结构图 一.1 导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 隐含参数 _ ...

  3. 【书评:Oracle查询优化改写】第四章

    [书评:Oracle查询优化改写]第四章 [书评:Oracle查询优化改写]第四章 BLOG文档结构图 导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O ...

  4. oracle如何查询排行第二,Oracle优化查询改写(第二章-给查询结果排序)

    2.1以指定的次序返回查询结果 select empno,ename,hiredate from emp where deptno =10 order by hiredate 或者 select em ...

  5. oracle书评,【书评:Oracle查询优化改写】第二章

    BLOG文档结构图 在上一篇中http://blog.itpub.net/26736162/viewspace-1652985/,我们主要分析了一些单表查询的时候需要注意的内容,今天第二章也很简单,主 ...

  6. 只是简单读了读《oracle查询优化改写》,就让我获益匪浅,想写好sql,这一本书就够了!

    目录 写在前面 基础知识 空值 返回前几行 获取随机数 like 排序 union 分页(6-10条) 表关联 复制表 日期 日期加减 trunc对于日期的用法 获取时间 判断是否是闰年(只需要判断二 ...

  7. 读书笔记-《基于Oracle的SQL优化》-第二章-1

    第二章:Oracle里的执行计划 2.1 什么是执行计划 Oracle用来执行目标SQL语句的这些步骤的组合就被称为执行计划. 执行计划可以分为如下三个部分: 1.目标SQL的正文.SQL ID和其执 ...

  8. 2016.9.9《Oracle查询优化改写技巧与案例》电子工业出版社一书中的技巧

    1.coalesce (c1,c2,c3,c4,...) 类似于nvl但可以从多个表达式中返回第一个不是null的值 2.要在where条件中引用列的别名,可以再嵌套一层查询 select * fro ...

  9. 《电信3.0——第二章》

    自现代电信诞生以来,该行业一直以闪电般的速度创新.发展和进步. 然而,近年来,这种情况有所放缓. 硬件和软件供应商为了保持在高层的地位(以及功耗.许可频谱和基础设施集中化等因素)而扼杀创新,导致全球覆 ...

最新文章

  1. 下拉列表 php,php数组生成html下拉列表的方法
  2. 三款云数据库性能测试,谁表现最好?
  3. [网络流24题]最小路径覆盖问题
  4. php获取ip 1,为什么php获取ip显示::1?
  5. 数据分析系统数据库选型
  6. FLEX:target和currentTarget属性的区别
  7. 分布式数据库DDM Sidecar模式负载均衡
  8. android 7.0 黑屏,Android app启动是出现白屏或者黑屏如何解决?
  9. 【嵌入式】Linux开发工具arm-linux-gcc安装及使用
  10. pip 加速_如何将Numpy加速700倍?用 CuPy 呀
  11. nginx负载均衡原理(理解篇)
  12. InnoDB存储引擎概念与原理解析
  13. 数据治理之——数据标准体系建设示例
  14. 1024程序员节:心疼被段子手黑得最惨的他们
  15. 导航栏、标签栏、工具栏、状态栏
  16. E-puck2机器人系列教程-7.机器人本体STM32固件更新
  17. PPPoE拨号过程解析
  18. JAVA计算机毕业设计学生会管理系统2021Mybatis+源码+数据库+lw文档+系统+调试部署
  19. python爬虫程序员工资-Python爬虫实战-数据可视化
  20. 日本亚马逊不能访问怎么解决!

热门文章

  1. pip3 install XXX加快下载速度
  2. 查看zookeeper的版本号
  3. 隐藏控制台程序的dos窗口
  4. 通过OpenCv的HoughCircles函数获取图片中的圆形
  5. 课外知识:人工智能简明入门学习指南
  6. IOS微信分享,或者app内分享微信图片不显示
  7. 并行并发CMS垃圾回收器:-XX:+UseConcMarkSweepGC
  8. 一些关于KIRIKIRI及2等等等等的研究资料- -
  9. 全球及中国电子级无水氟化氢发展动态与未来需求趋势预测报告2021~2026年
  10. 网页开发学习(一):制作一份邀请函