`

Oracle高级查询 --树查询

阅读更多

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团队推荐)--随书源代码

    他认为对于SQL的学习是永无止境的,相信每一个查询Oracle数据库的人都需要精通SQL语言,才能写出高效的查询。他参与本书的编写就是为了帮助别人实现这一目标。 目录 封面 -11 封底 -10 扉页 -9 版权 -8 版权声明 -7...

    Oracle DBA workshop1 (中文版)

    高级安装选项2-18 安装选项:无提示模式2-19 小结2-20 练习概览:安装Oracle 软件2-21 目录 iii 3 创建Oracle 数据库 课程目标3-2 计划数据库3-3 数据库:示例3-4 Database Configuration Assistant (DBCA) 3-5 使用...

    oracle10g课堂练习I(1)

    高级安装选项 2-18 安装选项:无提示模式 2-19 小结 2-20 练习概览:安装 Oracle 软件 2-21 3 创建 Oracle 数据库 课程目标 3-2 为数据库制定计划 3-3 数据库:示例 3-4 Database Configuration Assistant ...

    oracle10g课堂练习I(2)

    B 树索引 7-28 位图索引 7-30 索引选项 7-32 创建索引 7-34 什么是视图 7-35 创建视图 7-36 序列 7-37 创建序列 7-38 使用序列 7-40 临时表 7-41 临时表:注意事项 7-43 数据字典:概览 7-44 数据字典...

    Oracle Database 11g初学者指南--详细书签版

    3.7.8 Oracle高级安全选项 67 3.7.9 分派进程 67 3.8 使用配置文件 69 3.9 多层环境中的网络 70 3.10 安装Oracle 11g客户端软件 71 3.11 本章测验 75 第4章 SQL:结构化查询语言 77 4.1 SQL语句的组成 78 ...

    ORACLE9i_优化设计与系统调整

    §13.2.3 使用B树索引- 166 §13.2.4 使用反向键索引- 166 §13.2.5 使用索引组织表 166 §13.3 使用范围索引 166 §13.4 使用簇 - 167 §13.5 使用Hash 簇 - 168 §13.5.1 何时创建Hash 簇 168 §13.5.2 创建Hash ...

    oracle 层次查询

    高级sql关于层次查询更新 对于层次查询需要掌握: 1.解释层次查询的基本概念,识别需求中需要用到层次查询的能力。 2.建立和格式化一个树形报表(tree report)。 3.修剪树形结构的节点(node)和枝(branches)。

    Oracle_Database_11g完全参考手册.part3/3

    《Oracle Database 11g完全参考手册》全面详细地介绍了Oracle Database 11g的强大功能,阐述了如何使用所有的新增功能和工具,如何执行功能强大的SOL查询,如何编写PL/SQL和SQL*Plus语句,如何使用大对象和对象,...

    Oracle_Database_11g完全参考手册.part2/3

    《Oracle Database 11g完全参考手册》全面详细地介绍了Oracle Database 11g的强大功能,阐述了如何使用所有的新增功能和工具,如何执行功能强大的SOL查询,如何编写PL/SQL和SQL*Plus语句,如何使用大对象和对象,...

    Oracle8i_9i数据库基础

    第八章 一些高级的用法 188 §8.1 关于DECODE 188 §8.1.1 DECODE 中的if-then-else逻辑 188 §8.1.2 DECODE 的简单例子 188 §8.1.3 DECODE实现表的转置 189 §8.2 关于访问远程数据库 192 §8.2.1 数据库链接 192 ...

    Oracle DBA突击帮你赢得一份DBA职位(完全高清版)1

    1.3 如何表示树形结构  1.4 小结  第2章 Oracle体系架构  2.1 Oracle的网络配置  2.2 Oracle 10g架构  2.3 数据库  2.4 空间管理  2.5 实例  2.6 未尽话题  第3章 备份恢复  3.1 归档模式和非...

    oracle数据库11G初学者指南.Oracle.Database.11g,.A.Beginner's.Guide

    3.7.8 Oracle高级安全选项 3.7.9 分派进程 3.8 使用配置文件 3.9 多层环境中的网络 3.10 安装Oracle 11g客户端软件 3.11 本章测验 第4章 SQL:结构化查询语言 4.1 SOL语句的组成 4.1.1 DDL 4.1.2 DML 4.2 基本的...

    Oracle数据库实验操作

    实验29:树结构的查询start with子句 66 实验30:高级dml操作 68 第二部分pl/sql基础 69 匿名块的编写 69 实验31:书写一个最简单的块,运行并查看结果 69 实验32:在块中操作变量 70 实验33:在块中操作表的数据 71...

    不安装ORACLE客户端的系统移植方法.doc

     在注册表编辑器中左边树中依次展开“HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE”;  在ORACLE项上点击鼠标右键-&gt;导出,出现导入文件对话框,在文件名处填写“ORACLE”,单击保存,出成注册表文件(要记着保存的位置哟!);...

    Oracle 10g 开发与管理

    第六讲 高级查询 50 一.简单连接 50 1.简单连接 50 2.表别名 P136 50 3.各个表之间的连接 50 二. 使用Join连接 50 1.内连接 50 (1)等值连接(有相同的,逐个匹配) 50 (2)不等连接 51 (3)自然连接 51 2.外...

    Navicat Premium操作手册.7z

    5SQL Server 分区函数146SQL Server 分区方案147SQL 预览147维护147维护...高级功能169查询结果172查询参数172调试Oracle 查询(只限于完整版本)173模型(只限于Navicat Premium 和企业版)174边栏面板174模型树窗格...

    scheme2ddl:用于将oracle导出到ddl脚本集的命令行util

    scheme2ddl是用于将... 命令java -jar scheme2ddl.jar -url scott/tiger@localhost:1521:ORCL -o C:/temp/oracle-ddl2svn/将产生目录树 views/ view1.sql view2.sql tables/ table1.sql functions /f1.sql 更多命令

Global site tag (gtag.js) - Google Analytics