Oracle 查询优化改写

本文详细介绍了Oracle数据库查询优化的各种方法,包括单表查询、排序、数字操作以及多表操作。重点讲解了如何处理空值、排序、计算平均值、使用分析函数以及JOIN操作的优化策略。此外,还提到了UNION与OR的区别、自关联的应用以及如何检查表间数据一致性。
摘要由CSDN通过智能技术生成

第一章 单表查询

1、将空值转换为实际值

    SELECT coalesce(comm,0) FROM emp;

说明coalesce与nvl、decode的区别
①coalesce(comm,0),若comm为空,则取0,否则返回comm;
适合多个参数,coalesce(EXPR1,EXPR2,EXPR3,…,EXPRn),所有参数类型必须保持一致;
coalesce可返回第一个不为空的值。
②nvl(comm,0)只适合2个参数;将空值转换为0;
③decode(comm,’apple’,0),若comm=apple,返回0,否则返回NULL

2、拼接列
用字符串“||”把各列连在一起

    SELECT ename ||'的工作是'||job AS msg FROM emp WHERE deptno = 10;
    ——————————————————
    CLARK的工作是MANAGER

3、限制返回的行数

SELECT * 
  FROM (SELECT rownum AS an,emp.* FROM emp WHERE rownum <=2)
WHERE sn = 2;

本语句返回的是第二行的数据,但是为什么先要写子查询呢?
因为rownum是依次对数据做标识的,需要先把所有的数据取出来,才能确认第二行。

4、随机返回n条记录

SELECT empno,ename
  FROM (SELECT empno,ename FROM emp ORDER BY dbmsandom.value())
WHERE rownum <= 3;

为什么要写一层嵌套?
对于随机返回n行数据,正确的写法应该是 先随机排序,再取数据 。否则每次随机返回的值会是一样的。

第二章 给查询结果排序

1、将返回结果排序

ORDER BY 1,2;

表示按照SELECT后的字段进行排序,1表示第一栏,2表示第二栏;
此处的意思是,先按照第一栏升序排列,在第一栏相同的情况下,按第二栏升序排列。

2、TRANSLATE
#语法格式
TRANSLATE(expr,from_string,to_string)

from_string 与 to_string 一一对应,如果在from_string中没有的,就不变。
如果to_string 为空,则返回空值;
如果to_string 对应的没有字符,删除from_string中列出的字符将会被消掉。


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值