`

oracle高级查询实例,提升效率

阅读更多

使用Oracle特有的查询语法, 可以达到事半功倍的效果。

如下:

1.
树查询

create table tree (
    id number(
10not null primary key,
    name varchar2(
100not null,
    super number(
10not null                // 0 is root
);
-- 从子到父
select * from tree start with id = ? connect by id = prior super 
-- 从父到子
select * from tree start with id = ? connect by prior id = suepr
-- 整棵树
select * from tree start with super = 0 connect by prior id = suepr


2.
分页查询

select * from ( 
    
select my_table.*, rownum  my_rownum from ( 
        
select name, birthday from employee order by birthday
    ) my_table 
where rownum < 120 
where my_rownum >= 100;


3. 
累加查询, scott.emp为例

select empno, ename, sal, sum(sal) over(order by empno) result from emp;
 
     EMPNO ENAME             SAL     RESULT
---------- ---------- ---------- ----------
      7369 SMITH             800        800
      
7499 ALLEN            1600       2400
      
7521 WARD             1250       3650
      
7566 JONES            2975       6625
      
7654 MARTIN           1250       7875
      
7698 BLAKE            2850      10725
      
7782 CLARK            2450      13175
      
7788 SCOTT            3000      16175
      
7839 KING             5000      21175
      
7844 TURNER           1500      22675
      
7876 ADAMS            1100      23775
      
7900 JAMES             950      24725
      
7902 FORD             3000      27725
      
7934 MILLER           1300      29025


4.
高级group by

select decode(grouping(deptno),1,'all deptno',deptno) deptno,
       decode(
grouping(job),1,'all job',job) job,
       
sum(sal) sal
from emp 
group by ROLLUP(deptno,job);
DEPTNO                                   JOB              SAL
---------------------------------------- --------- ----------
10                                       CLERK           1300
10                                       MANAGER         2450
10                                       PRESIDENT       5000
10                                       all job         8750
20                                       CLERK           1900
20                                       ANALYST         6000
20                                       MANAGER         2975
20                                       all job        10875
30                                       CLERK            950
30                                       MANAGER         2850
30                                       SALESMAN        5600
30                                       all job         9400
all deptno                               all job        29025


5. use hint
当多表连接很慢时,ORDERED提示试试,也许会快很多

SELECT /**//*+ ORDERED */* 
  
FROM a, b, c, d 
 
WHERE 

分享到:
评论

相关推荐

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    Karen Morton及其团队在本书中提供了专业的方案:先掌握语言特性,再学习Oracle为提升语言效率而加入的支持特性,进而将两者综合考虑并在工作中加以应用。作者通过总结各自多年的软件开发和教学培训经验,与大家...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例113 深克隆效率的比较 141 实例114 transient关键字的应用 143 5.7 接口和内部类 145 实例115 使用sort()方法排序 145 实例116 简化compareTo()方法的重写 146 实例117 策略模式的简单应用 148 实例118 适配器...

    asp.net知识库

    忽略大小写Replace效率瓶颈IndexOf 随机排列算法 理解C#中的委托[翻译] 利用委托机制处理.NET中的异常 与正则表达式相关的几个小工具 你真的了解.NET中的String吗? .NET中的方法及其调用(一) 如何判断ArrayList,...

    精通qt4编程(源代码)

    \18.2.2 提升自定义窗口部件 444 \18.2.3 Qt设计器插件开发 444 \18.3 编写数据库插件 451 \18.4 自定义风格插件 455 \18.5 小结 458 \第19章 脚本——QtScript 459 \19.1 执行ECMAScript脚本 459 \19.2 QtScript中...

    精通Qt4编程(第二版)源代码

    \18.2.2 提升自定义窗口部件 444 \18.2.3 Qt设计器插件开发 444 \18.3 编写数据库插件 451 \18.4 自定义风格插件 455 \18.5 小结 458 \第19章 脚本——QtScript 459 \19.1 执行ECMAScript脚本 459 \19.2 ...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    媒体查询 CSS媒体查询允许开发者基于浏览网站的设备的特性来应用不同的样式申明,最常用的特性是视口宽度。 GCF 谷歌内嵌浏览器框架, 使用此插件,用户可以通过Internet Explorer的用户界面,以Chrome内核的渲染方式...

    整理后java开发全套达内学习笔记(含练习)

    export ORACLE_HOME=/oracledata/.../bin: BufferedReader建构时接受java.io.Reader物件 可使用java.io.InputStreamReader 例: import java.io.InputStreamReader; import java.io.BufferedReader; class n{ ...

Global site tag (gtag.js) - Google Analytics