关于connet by的学习

今天,我学习了oracle 的connect by。搞了半天我才弄明白这个connect by的意思。

connect by的作用就是递归查询,什么意思呢,下面上实例来理解。

SQL> select level,ename,job ,ename    from scott.emp emp  start with ename in ('WARD') connect by empno = prior mgr;

LEVEL ENAME                          JOB       ENAME

---------- ------------------------------ --------- ------------------------------

1 WARD                           SALESMAN  WARD

2 BLAKE                          MANAGER   BLAKE

3 KING                           PRESIDENT KING

解释:

/*START WITH 表示递归的起点,而 CONNECT BY 描述递归步骤,决定了爬树的方向, 也就是如何从第 n 步发展到第 (n + 1) 步。由于在归结 ename  时需要区分第 n 步和第 (n + 1) 步,因此使用 PRIOR (优先的意思)来表明  empno 属于第 n 步,而 mgr 属于第 (n + 1) 步。

先从start with ename=’WARD’这一行数据开始,因为prior 为mgr,那么第一步的mgr就是7698,其对应的empno也必须是7698,这样第二步就会输出7698即blake;7698对应的mgr是7839,所以这个mgr=7839将作为第三步的prior,而empno=7839其实就是king。以此类推。我们看到empno=7839即 king对应的mgr为空,那输出就到此结束。

其中的LEVEL是 伪列。这个列的作用是表明产生行的递归步骤 n 属于第几步。 在这个例子中,它表示领导与雇员之间相差的管理等级加 1(因为 LEVEL 一开始为 1)。

参考文档:

http://wenku.baidu.com/link?url=yFOQy8ARYvVLikTnD8CfA1OA9f9pwBRyAkNDjusRe3OU5o9ATAgYy2OWX5EcaOR_Q0xWvFLFO4YZgdO4EWTDJ9Oe_aPGMrozb9uLLumIE63

如果你读懂了上面的例子,那么就自己分析一下下面这个例子吧。

SQL> col ename for a30

SQL> select level,empno,lpad(ename,length(ename)+level*2-2,' ') ename

2  from emp

3  start with ename='KING'

4  connect by prior empno=mgr;

LEVEL      EMPNO ENAME

---------- ---------- ------------------------------

1       7839 KING

2       7566   JONES

3       7788     SCOTT

4       7876       ADAMS

3       7902     FORD

4       7369       SMITH

2       7698   BLAKE

3       7499     ALLEN

3       7521     WARD

3       7654     MARTIN

3       7844     TURNER

LEVEL      EMPNO ENAME

---------- ---------- ------------------------------

3       7900     JAMES

2       7782   CLARK

3       7934     MILLER

14 rows selected.

数据具有树状结构,就可以使用分级查询,如上面例子的领导下有员工、一级主管、二级主管、三级主管等 。

好了,既然上面两个小例子你都看懂了,那我们在看一下下面这个例子。

需求:输出某个月的所有日期。

解决办法:

select to_date('201504','yyyymm')+(rownum-1)

s_date from dual

connect by rownum<=last_day(to_date('201504','yyyymm')) - to_date('201504','yyyymm')+1;

S_DATE

-------------------

2015/04/01 00:00:00

2015/04/02 00:00:00

2015/04/03 00:00:00

2015/04/04 00:00:00

2015/04/05 00:00:00

2015/04/06 00:00:00

2015/04/07 00:00:00

2015/04/08 00:00:00

2015/04/09 00:00:00

2015/04/10 00:00:00

2015/04/11 00:00:00

S_DATE

-------------------

2015/04/12 00:00:00

2015/04/13 00:00:00

2015/04/14 00:00:00

2015/04/15 00:00:00

2015/04/16 00:00:00

2015/04/17 00:00:00

2015/04/18 00:00:00

2015/04/19 00:00:00

2015/04/20 00:00:00

2015/04/21 00:00:00

2015/04/22 00:00:00

S_DATE

-------------------

2015/04/23 00:00:00

2015/04/24 00:00:00

2015/04/25 00:00:00

2015/04/26 00:00:00

2015/04/27 00:00:00

2015/04/28 00:00:00

2015/04/29 00:00:00

2015/04/30 00:00:00

30 rows selected.

看到上面的SQL是不是有点懵?别急,我来一一分解。

下面这条语句可以输入每个自然月的第一天的日期。

下面这个SQL可以输出每个自然月的最后一天的日期:

下面两个SQL就是在输出一个月有多少天。

connect by是关键字,rownum是伪列, connect by rownum就是递归输出数字,因为connect by是会产生递增序列的。

SQL> select rownum from dual connect by rownum <10;

ROWNUM

----------

1

2

3

4

5

6

7

8

9

9 rows selected.

好了,看了上面的分析,那你就很容易理解下面这条语句的含义了,就不多说了。

select to_date('201504','yyyymm')+(rownum-1)

s_date from dual

connect by rownum<=last_day(to_date('201504','yyyymm')) - to_date('201504','yyyymm')+1;

另外,连续输入数字还能这么做:

SQL> SELECT LEVEL

2  FROM dual

3  CONNECT BY LEVEL < 10;

LEVEL

----------

1

2

3

4

5

6

7

8

9

9 rows selected.

简单的分页,用level,不能用rownum:

SQL> select level from dual where level between 10 and 20 connect by level<=20;

LEVEL
----------
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20

11 rows selected

SQL> select rownum+10 from dual connect by rownum<11;

ROWNUM+10

----------

11

12

13

14

15

16

17

18

19

20

10 rows selected.

来自为知笔记(Wiz)

附件列表

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28916011/viewspace-1666140/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28916011/viewspace-1666140/

关于connet by的学习相关推荐

  1. QT学习杂项(1)--在connet函数里使用自定义类型

     在connet函数里使用自定义类型时,需要在类的构造函数里注册一下,否则会提示XXXType未知大小. eg: 1.先在构造函数里注册:qRegisterMetaType<QVector& ...

  2. Spring学习3—控制反转(IOC)Spring依赖注入(DI)和控制反转(IOC)

    一.思想理解    Spring 能有效地组织J2EE应用各层的对象.不管是控制层的Action对象,还是业务层的Service对象,还是持久层的DAO对象,都可在Spring的 管理下有机地协调.运 ...

  3. CCNP学习笔记(5)

    一.IP地址的规划 1.路由器 ①端口 ②路由协议的network声明 ③控制列表 ④NAT ⑤DHCP ⑥路由过滤 ⑦静态路由(默认路由) 2.交换机 ①管理IP ②vlan通信 ③三层交换 ④访问 ...

  4. Node.JS 学习路线图

    2019独角兽企业重金招聘Python工程师标准>>> 从零开始nodejs系列文章, 将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框 ...

  5. TCP/IP协议学习(五) 基于C# Socket的C/S模型

    TCP/IP协议作为现代网络通讯的基石,内容包罗万象,直接去理解理论是比较困难的:然而通过实践先理解网络通讯的理解,在反过来理解学习TCP/IP协议栈就相对简单很多.C#通过提供的Socket API ...

  6. Linux开发学习笔记(二)

    (温馨提示:内容有点多,可点右边的目录进行跳转) Shell编程 1.简单介绍 Shell 脚本(shell script),是一种为 shell 编写的脚本程序.Shell 编程跟 java.php ...

  7. python基础学习笔记——完结

    文章目录 一. python概述 1.1 概述 1.2 优缺点 1.3 应用场景 二. python解释器和集成环境的安装 2.1. 编程语言分类 2.2 基本环境搭建 2.3 集成开发环境pycha ...

  8. 18、HTTP基本操作及源码编译安装 学习笔记

    HTTPHyper Text Transfer Protocol超文本传输协议 HTMLHyper Text Mark-up Language超文本标记语言 URIUniform Resource I ...

  9. 《史上最全、最强Java学习路线知识点整理!!全是干货!!》

    自己平时学习整理的笔记,分享给各位,希望可以帮助各位,文章很长,点击收藏慢慢看吧!以后会分别对各个知识点进行透彻分析,敬请期待! Java基础 集合 HashMap 1.7 数组 + 链表.扩容时头插 ...

最新文章

  1. Java 高并发面试题
  2. 编程珠玑第六章习题二——C++实现一个数的因子分解
  3. important的扯淡
  4. Python之创建单元素tuple
  5. 视频解码基础知识(二)
  6. python super 理解(四)
  7. ajax项目设置,jQuery_ajax预处理_和后置处理;项目中ajax自动设置_token_请求头,_接口响应code的统一处理...
  8. ​EMNLP 2021 | 以对比损失为微调目标,UMass提出更强大的短语表示模型
  9. Memcached----2-3
  10. c语言运行后出现xt073,2017年北京工业大学城市交通学院894C语言与数据结构之C程序设计考研强化模拟题...
  11. html只读下拉框,Html.DropDownList – 禁用/只读
  12. 5动态显示图片_单片机入门 数码管的静态显示和动态显示 壁纸
  13. 《区块链技术指南》摘要
  14. html5好看表格样式,CSS实现的清爽、漂亮的表格样式分享
  15. js判断数组中是否包含某个元素
  16. 用Hydra工具暴力破解Windows7管理员密码并访问它的共享服务
  17. 关于使用Python——写最佳体重测试
  18. win8 配置要求
  19. CAD二次开发--ZOOM自定义缩放到视口区域,解决SelectCrossingWindow等方法对视口外实体不起作用的问题
  20. php网页课程设报告,网页设计课程设计报告

热门文章

  1. Excel单元格和单元格区域的引用
  2. Vivado创建调用自定义IP上板验证
  3. 北京计算机组装在哪,计算机组装与维护(第2版)
  4. 笨方法学Python 习题 42: 对象、类、以及从属关系
  5. 转发与重定向的区别【通俗易懂,句句是要点】
  6. python 读excel每行替换_Python脚本操作Excel实现批量替换功能
  7. uniapp 微信小程序分享海报
  8. 智慧农业物联网解决方案—农业产业园区信息化建设
  9. Android属性系统分析
  10. 毕业设计 单片机交通安全车辆测速系统 - 嵌入式 物联网