始创于2000年 股票代码:831685
咨询热线:0371-60135900 注册有礼 登录
  • 挂牌上市企业
  • 60秒人工响应
  • 99.99%连通率
  • 7*24h人工
  • 故障100倍补偿
您的位置: 网站首页 > 帮助中心>文章内容

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

发布时间:  2012/9/21 16:35:30

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

如下:

1. 树查询

create table tree (
     id number(10) not null primary key,
     name varchar2(100) not null,-
 

     super number(10) not 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

 


本文出自:亿恩科技【www.enkj.com】

服务器租用/服务器托管中国五强!虚拟主机域名注册顶级提供商!15年品质保障!--亿恩科技[ENKJ.COM]

  • 您可能在找
  • 亿恩北京公司:
  • 经营性ICP/ISP证:京B2-20150015
  • 亿恩郑州公司:
  • 经营性ICP/ISP/IDC证:豫B1.B2-20060070
  • 亿恩南昌公司:
  • 经营性ICP/ISP证:赣B2-20080012
  • 服务器/云主机 24小时售后服务电话:0371-60135900
  • 虚拟主机/智能建站 24小时售后服务电话:0371-60135900
  • 专注服务器托管17年
    扫扫关注-微信公众号
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 亿恩科技 版权所有  地址:郑州市高新区翠竹街1号总部企业基地亿恩大厦  法律顾问:河南亚太人律师事务所郝建锋、杜慧月律师   京公网安备41019702002023号
      0
     
     
     
     

    0371-60135900
    7*24小时客服服务热线