oracle9i学习笔记之十七 分级取回数据
2008-12-13 17:14
253 查看
1.分级查询
SELECT [LEVEL],column,expr...
FROM table
[WHERE condition(s)]
[START WITH condition(s)]
[CONNECT BY PRIOR condition(s)];
LEVEL:对每行返回一个级别,对根行LEVEL伪列返回1;对孩子的LEVEL伪列返回2,以此类推
START WITH:指定层次的根行
CONNCT BY PRIOR:指定查询的方向
1)START WITH子句可以和任何有效的条件协同使用
START WITH column1=value
2)使用emp表,从名字是KING的雇员开始
...START WITH ename='KING'
...START WITH mgr IS NULL
3)一个START WITH条件可以包含子查询
...START WITH empno=(SELECT empno
FROM emp
WHERE ename='KING')
CONNECT BY PRIOR column1=column2
4)使用emp表从顶向下遍历:
...CONNECT BY PRIOR empno=mgr
5)使用emp表从底向上遍历:
...CONNECT BY empno=PRIOR mgr
2.遍历树:
1)自顶向下遍历
例:
SELECT level,empno,ename||' 雇员的经理是 '||
PRIOR ename "雇佣关系"
FROM emp
START WITH ename='KING'
CONNECT BY PRIOR empno=mgr;
结果:
LEVEL EMPNO 雇佣关系
1 7839 KING 雇员的经理是
2 7566 JONES 雇员的经理是 KING
3 7788 SCOTT 雇员的经理是 JONES
4 7876 ADAMS 雇员的经理是 SCOTT
3 7902 FORD 雇员的经理是 JONES
4 7369 SMITH 雇员的经理是 FORD
2 7698 BLAKE 雇员的经理是 KING
3 7499 ALLEN 雇员的经理是 BLAKE
3 7521 WARD 雇员的经理是 BLAKE
3 7654 MARTIN 雇员的经理是 BLAKE
3 7844 TURNER 雇员的经理是 BLAKE
3 7900 JAMES 雇员的经理是 BLAKE
2 7782 CLARK 雇员的经理是 KING
3 7934 MILLER 雇员的经理是 CLARK
2)从底向上遍历
例:
SELECT level,empno,ename,job,mgr
FROM emp
START WITH empno=7876
CONNECT BY empno=PRIOR mgr;
结果:
LEVEL EMPNO ENAME JOB MGR
1 7876 ADAMS CLERK 7788
2 7788 SCOTT ANALYST 7566
3 7566 JONES MANAGER 7839
4 7839 KING PRESIDENT
3.用LEVEL和LPAD格式化分级报告
创建一个报告,显示公司的管理层,从最高级别开始,缩进下面跟随的级别
例:
SELECT LEVEL,LPAD(ename,LENGTH(ename)+(LEVEL*2)-2,'-') AS org_chart
FROM emp
START WITH ename='KING'
CONNECT BY PRIOR empno=mgr;
结果:
LEVEL ORG_CHART
1 KING
2 --JONES
3 ----SCOTT
4 ------ADAMS
3 ----FORD
4 ------SMITH
2 --BLAKE
3 ----ALLEN
3 ----WARD
3 ----MARTIN
3 ----TURNER
3 ----JAMES
2 --CLARK
3 ----MILLER
4.修剪分支
1)用WHERE子句去除一个结点
WHERE ename!='SCOTT'
2)用CONNECT BY子句去除一个分支
CONNECT BY PRIOR
empno=mgr
AND ename!='SCOTT'
练习
1.设计一个表,记录客户在一段时间内所拨打电话的树形层次结构。如A用户5点打给B用户,5点10分打给C用户;B用户5点5分打给D用户;D用户6点打给E用户等等
根据时间段来查询层次关系
SELECT [LEVEL],column,expr...
FROM table
[WHERE condition(s)]
[START WITH condition(s)]
[CONNECT BY PRIOR condition(s)];
LEVEL:对每行返回一个级别,对根行LEVEL伪列返回1;对孩子的LEVEL伪列返回2,以此类推
START WITH:指定层次的根行
CONNCT BY PRIOR:指定查询的方向
1)START WITH子句可以和任何有效的条件协同使用
START WITH column1=value
2)使用emp表,从名字是KING的雇员开始
...START WITH ename='KING'
...START WITH mgr IS NULL
3)一个START WITH条件可以包含子查询
...START WITH empno=(SELECT empno
FROM emp
WHERE ename='KING')
CONNECT BY PRIOR column1=column2
4)使用emp表从顶向下遍历:
...CONNECT BY PRIOR empno=mgr
5)使用emp表从底向上遍历:
...CONNECT BY empno=PRIOR mgr
2.遍历树:
1)自顶向下遍历
例:
SELECT level,empno,ename||' 雇员的经理是 '||
PRIOR ename "雇佣关系"
FROM emp
START WITH ename='KING'
CONNECT BY PRIOR empno=mgr;
结果:
LEVEL EMPNO 雇佣关系
1 7839 KING 雇员的经理是
2 7566 JONES 雇员的经理是 KING
3 7788 SCOTT 雇员的经理是 JONES
4 7876 ADAMS 雇员的经理是 SCOTT
3 7902 FORD 雇员的经理是 JONES
4 7369 SMITH 雇员的经理是 FORD
2 7698 BLAKE 雇员的经理是 KING
3 7499 ALLEN 雇员的经理是 BLAKE
3 7521 WARD 雇员的经理是 BLAKE
3 7654 MARTIN 雇员的经理是 BLAKE
3 7844 TURNER 雇员的经理是 BLAKE
3 7900 JAMES 雇员的经理是 BLAKE
2 7782 CLARK 雇员的经理是 KING
3 7934 MILLER 雇员的经理是 CLARK
2)从底向上遍历
例:
SELECT level,empno,ename,job,mgr
FROM emp
START WITH empno=7876
CONNECT BY empno=PRIOR mgr;
结果:
LEVEL EMPNO ENAME JOB MGR
1 7876 ADAMS CLERK 7788
2 7788 SCOTT ANALYST 7566
3 7566 JONES MANAGER 7839
4 7839 KING PRESIDENT
3.用LEVEL和LPAD格式化分级报告
创建一个报告,显示公司的管理层,从最高级别开始,缩进下面跟随的级别
例:
SELECT LEVEL,LPAD(ename,LENGTH(ename)+(LEVEL*2)-2,'-') AS org_chart
FROM emp
START WITH ename='KING'
CONNECT BY PRIOR empno=mgr;
结果:
LEVEL ORG_CHART
1 KING
2 --JONES
3 ----SCOTT
4 ------ADAMS
3 ----FORD
4 ------SMITH
2 --BLAKE
3 ----ALLEN
3 ----WARD
3 ----MARTIN
3 ----TURNER
3 ----JAMES
2 --CLARK
3 ----MILLER
4.修剪分支
1)用WHERE子句去除一个结点
WHERE ename!='SCOTT'
2)用CONNECT BY子句去除一个分支
CONNECT BY PRIOR
empno=mgr
AND ename!='SCOTT'
练习
1.设计一个表,记录客户在一段时间内所拨打电话的树形层次结构。如A用户5点打给B用户,5点10分打给C用户;B用户5点5分打给D用户;D用户6点打给E用户等等
根据时间段来查询层次关系
相关文章推荐
- 大数据学习笔记(十七)-MapReduce
- PeopleSoft 学习笔记 全球薪资 第 07 章 分级/数据筛选元素
- 大数据学习笔记之十七 Google技术之MapRduce和BigTable
- 数据科学学习笔记(use R)(3)
- 数据结构与算法学习笔记--哈希表
- MySQL第五个学习笔记 该数据表的操作
- Python学习笔记(0)——编程0基础数据分析进阶之路
- Redis学习笔记3--数据类型
- Phoenix学习笔记 --- phoenix支持的数据类型
- jQuery学习笔记之 Ajax操作篇(二) - 数据传递
- 大数据学习笔记之十八 Goolge三种新技术
- 【数据库学习笔记】(3)SQL数据类型与Java数据类型的对应关系
- 【Swift】学习笔记(一)——熟知 基础数据类型,编码风格,元组,主张
- Java基础学习笔记(一)环境变量配置,数据类型,运算符,控制语句,循环语句
- python学习笔记(四)——数据字典
- MySQL学习笔记五:数据类型
- MySQL学习笔记十二:数据备份与恢复
- GO学习笔记 - 数据类型推导
- iOS学习笔记(十七)——文件操作(NSFileManager)
- python学习笔记系列----(三)数据结构