【SQL】CONNECT BY 层次化查询
层次化查询,顾名思义就是把查询结果有层次的呈现出来。层次化查询结果类似于树状结构,最顶端的是“根节点”,下面是“父节点”,没有子节点的是“叶节点”。
为了让一个或多个表具有层次关系,必须使用相关的字段将表关联起来。比如HR用户下的employees表中的employee_id和manager_id列。
基本语法为:
[START WITH conditiona1] CONNECT BY condition2
START WITH conditiona1:用来指定根节点,condition1中可以加子查询。
CONNECT BY condition2:condition2中必须包含PRIOR关键字,用来指定列是来自父行。PRIOR可以位于比较操作符的任何一方。condition不能包含子查询。
如:
SQL> select employee_id,manager_id,first_name,last_name,hire_date
2 from employees
3 start with manager_id is null
4 connect by prior employee_id=manager_id;
EMPLOYEE_ID MANAGER_ID FIRST_NAME LAST_NAME HIRE_DATE
----------- ---------- -------------------- ------------------------- -------------------
100 Steven King 2003-06-17 00:00:00
101 100 Neena Kochhar 2005-09-21 00:00:00
108 101 Nancy Greenberg 2002-08-17 00:00:00
109 108 Daniel Faviet 2002-08-16 00:00:00
110 108 John Chen 2005-09-28 00:00:00
111 108 Ismael Sciarra 2005-09-30 00:00:00
112 108 Jose Manuel Urman 2006-03-07 00:00:00
113 108 Luis Popp 2007-12-07 00:00:00
200 101 Jennifer Whalen 2003-09-17 00:00:00
203 101 Susan Mavris 2002-06-07 00:00:00
为了知道当前查询树状结构所处的层次,可以使用level伪列。加入level伪列后显示如下。
SQL> select level,lpad(' ',2*(level-1))||last_name "EmpName",hire_date,salary
2 from employees
3 start with manager_id is null
4 connect by manager_id=prior employee_id;
LEVEL EmpName HIRE_DATE SALARY
---------- --------------- ------------------- ----------
1 King 2003-06-17 00:00:00 24000
2 Kochhar 2005-09-21 00:00:00 17000
3 Greenberg 2002-08-17 00:00:00 12008
4 Faviet 2002-08-16 00:00:00 9000
4 Chen 2005-09-28 00:00:00 8200
4 Sciarra 2005-09-30 00:00:00 7700
4 Urman 2006-03-07 00:00:00 7800
4 Popp 2007-12-07 00:00:00 6900
3 Whalen 2003-09-17 00:00:00 4400
3 Mavris 2002-06-07 00:00:00 6500
3 Baer 2002-06-07 00:00:00 10000
3 Higgins 2002-06-07 00:00:00 1200
【SQL】CONNECT BY 层次化查询的更多相关文章
- SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)
--====================================================== --SQL基础-->层次化查询(START BY ... CONNECT BY ...
- oracle 层次化查询(生成菜单树等)
1.简介:Oracle层次化查询是Oracle特有的功能实现,主要用于返回一个数据集,这个数据集存在树的关系(数据集中存在一个Pid记录着当前数据集某一条记录的Id). 2.层次化查询主要包含两个子句 ...
- SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)[转]
--====================================================== --SQL基础-->层次化查询(START BY ... CONNECT BY ...
- SQL 高级查询(层次化查询,递归)
SQL 高级查询 前面我们写了一下 SQL 的极简入门,今天来说点高级查询.没看到的朋友可以点击下面链接查看. 1 小时 SQL 极速入门(一) 1 小时 SQL 极速入门(二) 1 小时 SQL 极 ...
- Red Gate系列之八 SQL Connect 1.1.1.19 Edition 数据库连接及操作工具 完全破解+使用教程
原文:Red Gate系列之八 SQL Connect 1.1.1.19 Edition 数据库连接及操作工具 完全破解+使用教程 Red Gate系列之八 SQL Connect 1.1.1.19 ...
- SQL多表连接查询
SQL多表连接查询 本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:student 截图如下: 表2:course 截图如下: (此时这样建表只是为了演示连接SQL语句,当然实际 ...
- 【SQL】Oracle分页查询的三种方法
[SQL]Oracle分页查询的三种方法 采用伪列 rownum 查询前10条记录 ? 1 2 3 4 5 6 7 8 9 10 11 [sql] select * from t_user t whe ...
- C# ADO.NET (sql语句连接方式)(查询)
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- [.NET] SQL数据总笔数查询
[.NET] SQL数据总笔数查询 程序下载 范例下载:点此下载 原始码下载:点此下载 NuGet封装:点此下载 数据查询 开发系统时,使用C#执行SQL查询指令,就可以从SQL数据库里查询所需数据. ...
随机推荐
- 基于Composer的Laravel扩展包开发工作流
使用场景 在引用第三方包的时候,对第三方包有改动需求,需要将代码放在自己的仓库:并且自己的其他项目也有需求引用自定义的第三方包:甚至自己会发布修改后的第三方包: 读完本文你讲获得: Git Submo ...
- qwb与学姐
qwb与学姐 Time Limit: 1 Sec Memory Limit: 128 MB Description qwb打算向学姐表白,可是学姐已经受够了他的骚扰,于是出了一个题想难住他:已知一幅 ...
- 清北学堂模拟赛d2t1 一道图论神题(god)
题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只有点权. LYK想把这个图删干净,它的方法是这样的.每次选择一个点,将它删掉,但删这个点是需要代价的.假 ...
- 调度器Quartz的配置文件中的线程池设置
在使用调度器Quartz来进行数据归档的时候,当我们开的定时任务很多的时候,就会出现一些定时任务不会被触发的现象,这就是线程阻塞.那到底什么叫线程阻塞呢? 线程阻塞,顾名思义就是说线程被阻塞了,没有按 ...
- ZooKeeper环境搭建(单机/集群)(转)
前提: 配置文件主要是在$ZOOKEEPER_HOME/conf/zoo.cfg,刚解压时为zoo_sample.cfg,重命名zoo.cfg即可. 配置文件常用项参考:http://www.cnbl ...
- password加密的算法
加密原理:採用不同的加密算法对字符串进行加盐加密处理. 用以防止密文被md5字典进行反向暴力破解. 採用美国家安全局发布的加密算法(RFC 4357)加密,不採用自己创建的加密算法,以避免有安全漏洞. ...
- DBCP数据源使用
DBCP:DataBase Connection Pool 1.须要的jar:commons-dbcp.jar commons-pool.jar 2.把DBCP的配置文件(dbcpconfig.pr ...
- java js url传参中文乱码
String item = this.getRequest().getParameter("item"); item = new String(item.getBytes(&quo ...
- poj 1741(树的点分治)
Tree Give a tree with n vertices,each edge has a length(positive integer less than 1001). Define dis ...
- [BZOJ 1735] Muddy Fields
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1735 [算法] 二分图最小覆盖 [代码] #include<bits/stdc ...