层次化查询,顾名思义就是把查询结果有层次的呈现出来。层次化查询结果类似于树状结构,最顶端的是“根节点”,下面是“父节点”,没有子节点的是“叶节点”。

为了让一个或多个表具有层次关系,必须使用相关的字段将表关联起来。比如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 层次化查询的更多相关文章

  1. SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)

    --====================================================== --SQL基础-->层次化查询(START BY ... CONNECT BY ...

  2. oracle 层次化查询(生成菜单树等)

    1.简介:Oracle层次化查询是Oracle特有的功能实现,主要用于返回一个数据集,这个数据集存在树的关系(数据集中存在一个Pid记录着当前数据集某一条记录的Id). 2.层次化查询主要包含两个子句 ...

  3. SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)[转]

    --====================================================== --SQL基础-->层次化查询(START BY ... CONNECT BY ...

  4. SQL 高级查询(层次化查询,递归)

    SQL 高级查询 前面我们写了一下 SQL 的极简入门,今天来说点高级查询.没看到的朋友可以点击下面链接查看. 1 小时 SQL 极速入门(一) 1 小时 SQL 极速入门(二) 1 小时 SQL 极 ...

  5. 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 ...

  6. SQL多表连接查询

    SQL多表连接查询 本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:student  截图如下: 表2:course  截图如下: (此时这样建表只是为了演示连接SQL语句,当然实际 ...

  7. 【SQL】Oracle分页查询的三种方法

    [SQL]Oracle分页查询的三种方法 采用伪列 rownum 查询前10条记录 ? 1 2 3 4 5 6 7 8 9 10 11 [sql] select * from t_user t whe ...

  8. C# ADO.NET (sql语句连接方式)(查询)

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  9. [.NET] SQL数据总笔数查询

    [.NET] SQL数据总笔数查询 程序下载 范例下载:点此下载 原始码下载:点此下载 NuGet封装:点此下载 数据查询 开发系统时,使用C#执行SQL查询指令,就可以从SQL数据库里查询所需数据. ...

随机推荐

  1. Excel 绘制正态概率图-正态性检验

  2. Mysql 模糊查询总结

    语法: SELECT 字段集 FROM 表名 WHERE 字段名 LIKE 条件 模糊查询有四种匹配模式: 1.%:匹配任意0个或多个字符. 2._:匹配任意1个字符. 3.[]:匹配括号内所列字符中 ...

  3. 简单的SpringBoot环境搭建

    开始搭建前请确认您的计算机中的Maven已正确配置 一:使用IDEA创建一个Maven项目,图中第一个指针请选择自己正在使用的JDK版本,指针二请打勾,选中指针三所指向的类型并点击Next 二:填写G ...

  4. xth的第 12 枚硬币(codevs 1366)

    题目描述 Description 传说 xth 曾经拥有11枚完全相同硬币(你懂得),不过今年呢,rabbit又送了他一 枚硬币.这枚硬币和其他硬币外观相同,只有重量不同,或轻或重.Xth 一不小心, ...

  5. nyoj_782_星期几?_201312071940

    星期几? 时间限制:500 ms  |           内存限制:65535 KB 难度:2   描述                      Acmer 小鱼儿 埋头ku算一道题 条件:已知给 ...

  6. [bzoj1131][POI2008]Sta_树形dp

    Sta bzoj-1131 POI-2008 题目大意:给定一棵n个点的树,求一个根,使得深度和最大. 注释:$1\le n \le 10^6$. 想法:扭一扭即可. 扭的时候看看这个点当没当过根. ...

  7. SGU - 403 - Scientific Problem (水)

    403. Scientific Problem Time limit per test: 0.25 second(s) Memory limit: 65536 kilobytes input: sta ...

  8. 浅析android适配器adapter中的那些坑

    做项目中遇到的,折磨了我将近两天,今天把经验分享出来.让大家以后少走点弯路,好了.简单来说一下什么是android的适配器,怎样定义.怎样添加适配器的重用性.怎样去减少程序的耦合性 适配器顾名思义是用 ...

  9. 用Arduino+OSC建立一个iPad铁路王国巡视机

    翻译自:http://blog.mydream.com.hk/howto/build-up-a-ipad-plarail-patrol-with-arduino-osc 简单介绍 这个教程告诉你怎样建 ...

  10. 使用U-Boot的TFTP(远程/网络内核)

    前提条件 假设您的主机PC运行的是Ubuntu 14.04.1 LTS或更高版本,并且与您的开发平台在同一个本地网络上;为了简单起见,我们假设网络上也有DHCP服务器.如果使用Juno,请确保使用的是 ...