SQL 递归查询范例应用

前段时间因为单位OA的替换,需要做一些上下级的递归查询,一直没找到办法。网上找了下资料,心中大概有个数了。

先创建2个表

CREATE TABLE dept(  
deptno INT PRIMARY KEY,  
dname VARCHAR(20),  
loc VARCHAR(20), 
SJdeptno INT 
)  
INSERT INTO dept VALUES (1,'英三厂','李军','')
INSERT INTO dept VALUES (10,'制造处','小马',1)  
INSERT INTO dept VALUES (11,'研发处','小明',1)  
INSERT INTO dept VALUES (21,'技术部','王虎',10)  
INSERT INTO dept VALUES (22,'品管部','赵敏',10)  
INSERT INTO dept VALUES (23,'软件部','吴互',11)  
INSERT INTO dept VALUES (24,'硬件部','汤米',11) 
CREATE TABLE emp(
empno INT PRIMARY KEY,
ename VARCHAR(20) NOT NULL,


insert into emp values(7369,'李军','CLERK',7902,'1980-12-17',1640,NULL,1);  
insert into emp values(7499,'小马','SALESMAN',7698,'1981-2-20',11400,300,10);  
insert into emp values(7521,'小明','SALESMAN',7698,'1981-2-22',5200,500,11);  
insert into emp values(7566,'王虎','MANAGER',7839,'1981-4-2',7015,NULL,21);  
insert into emp values(7654,'赵敏','SALESMAN',7698,'1981-9-28',5200,1400,22);  
insert into emp values(7698,'吴互','MANAGER',7839,'1981-5-1',5900,NULL,23);  
insert into emp values(7782,'汤米','MANAGER',7839,'1981-6-9',2470,NULL,24); 


其中emp表中的DEPTNO和dept表中的deptno是对应的关系,我们想查询一个员工的所属的部门层级架构

WITH B1 AS(
SELECT deptno,dname,dname 一级部门,''二级部门,'' 三级部门,'' 四级部门,'' 五级部门 
FROM dept WHERE deptno=1 ),  /* deptno=1作为root node,这是递归查询的起始点 */ 

B2 AS(
SELECT B.deptno,B.dname,B1.一级部门,B.dname 二级部门,'' 三级部门,'' 四级部门,'' 五级部门 
FROM B1 JOIN dept B ON B.SJdeptno=B1.deptno ), /* 将上面的B1表和dept表(B)作连接查询,得出B2表 */

B3 AS(
SELECT B.deptno,B.dname,B2.一级部门,B2.二级部门,B.dname 三级部门,'' 四级部门,'' 五级部门 
FROM B2 JOIN dept B ON B.SJdeptno=B2.deptno ), /* 将上面的B2表和dept表(B)作连接查询,得出B3表 */

B AS(
SELECT * FROM B1
UNION ALL
SELECT * FROM B2
UNION ALL
SELECT * FROM B3)
select * from B  /* 将B1,B2,B3进行联合查询 */ 

B1,B2,B3 分别查询的结果,便于理解。


WITH B1 AS(
SELECT deptno,dname,dname 一级部门,''二级部门,'' 三级部门,'' 四级部门,'' 五级部门 FROM dept WHERE deptno=1 ),

B2 AS(
SELECT B.deptno,B.dname,B1.一级部门,B.dname 二级部门,'' 三级部门,'' 四级部门,'' 五级部门 
FROM B1 JOIN dept B ON B.SJdeptno=B1.deptno ),

B3 AS(
SELECT B.deptno,B.dname,B2.一级部门,B2.二级部门,B.dname 三级部门,'' 四级部门,'' 五级部门 
FROM B2 JOIN dept B ON B.SJdeptno=B2.deptno ),

B AS(
SELECT * FROM B1
UNION ALL
SELECT * FROM B2
UNION ALL
SELECT * FROM B3)

select ename,一级部门,二级部门,三级部门,四级部门,五级部门 from B JOIN emp ON emp.DEPTNO=B.deptno
用一个连接查询查询员工的组织架构


这样员工的组织架构就很清晰了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1篇 Java编程基础   第1章 Java开发环境的搭建(教学视频:9分钟) 2   1.1 理解Java 2   1.2 搭建Java所需环境 3   1.2.1 下载JDK 3   1.2.2 安装JDK 4   1.2.3 配置环境 5   1.2.4 测试JDK配置是否成功 7   实例1 开发第一个Java程序 7   第2章 Java基础类型与运算符(教学视频:39分钟) 9   2.1 基础类型 9   实例2 自动提升 9   实例3 自动转换 10   实例4 常用基础类型之强制转换 11   2.2 运算符 12   实例5 算术运算符 12   实例6 关系运算符 13   实例7 逻辑运算符 14   实例8 位运算符 15   实例9 移位运算符 16   实例10 转型运算符 17   2.3 其他形式 18   实例11 常量与变量 18   实例12 各种进制的转换 19   实例13 Java中的进制与移位运算符 22   第3章 条件控制语句(教学视频:75分钟) 26   3.1 if控制语句 26   实例14 判断输入的年份是否为闰年 26   实例15 抽奖活动 27   3.2 for语句 28   实例16 小九九乘法表 28   实例17 如何列出素数 29   实例18 Java中的递归 31   实例19 男生女生各多少人 32   实例20 求水仙花数 34   实例21 求任意一个正数的阶乘 35   实例22 求n的n次方 35   实例23 利用for循环输出几何图形 36   实例24 杨辉三角 38   3.3 while语句 39   实例25 求1到100之间的和 39   实例26 存上100元需要多少天 40   实例27 输出100之间的所有偶数 41   实例28 如何判断回文数字 42   3.4 do…while语句 43   实例29 输出100之间的所有奇数 44   实例30 求最大的随机数 44   3.5 switch语句 45   实例31 判断字母分类 46   实例32 优良及差 47   实例33 打印任意一年日历 48   实例34 一年四季的划分 51   第2篇 Java数据处理   第4章 异常处理(教学视频:62分钟) 54   4.1 编译时异常 54   实例35 除0发生的算术异常(ArithmeticException) 54   实例36 数组下标越界异常(ArrayIndexOutOfBoundsException) 55   实例37 数组元素类型不匹配异常(ArrayStoreException) 56   实例38 强制类型转换异常(ClassCastException) 56   实例39 索引越界异常(IndexOutOfBoundsException) 57   实例40 空指针异常(NullPointerException) 58   实例41 数字格式转换异常(NumberFornatException) 59   实例42 字符串索引越界异常(StringIndexOutBounds) 60   实例43 操作错误(UnsupportedOperationException) 60   4.2 运行时异常 61   实例44 找不到指定类时发生的异常(ClassNotFoundException) 62   实例45 请求的方法不存在(NoSuchMethodException) 63   4.3 try…catch捕获异常 65   实例46 try…catch捕获异常的实例 66   实例47 try…catch…finally捕获异常的实例 67   实例48 try…catch嵌套捕获异常的实例 68   4.4 throws声明异常 69   实例49 throws声明异常实例一 69   实例50 throws声明异常实例 70   4.5 throw抛出异常 72   实例51 throw抛出异常实例一 72   实例52 throw抛出异常实例 73   4.6 自定义异常 74   实例53 自定义异常实例一 74   实例54 自定义异常实例 75   第5章 数组(教学视频:98分钟) 78   5.1 一维数组 78   实例55 一

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值