1. 程式人生 > 其它 >Oracle筆記12——Oracle層次查詢

Oracle筆記12——Oracle層次查詢

層次查詢(分級查詢)

一般格式:

SELECT [LEVEL], 列名, 表示式 ... FROM 表格 [WHERE 條件] [START WITH 條件] [CONNECT BY PRIOR 條件];

--從頂向下查詢
1.查詢KING管理的所有的下級員工資訊
SELECT * FROM emp START WITH ename = 'KING' CONNECT BY PRIOR 父列 = 子列;--empno父列   mgr子列
SELECT * FROM emp START WITH ename = 'KING' CONNECT BY PRIOR empno = mgr;
SELECT
* FROM emp START WITH ename = 'KING' CONNECT BY mgr = PRIOR empno;--同上 --從下向上查詢 1.查詢SMITH的所有的上級員工資訊 SELECT * FROM emp START WITH ename = 'SMITH' CONNECT BY PRIOR 子列 = 父列;--empno父列 mgr 列 SELECT * FROM emp START WITH ename = 'SMITH' CONNECT BY PRIOR mgr = empno; SELECT * FROM emp START WITH ename =
'SMITH' CONNECT BY empno = PRIOR mgr;--同上 --使用LEVEL偽列 SELECT LEVEL,emp.* FROM emp START WITH ename = 'KING' CONNECT BY PRIOR empno = mgr; SELECT LEVEL,emp.* FROM emp START WITH ename = 'SMITH' CONNECT BY PRIOR mgr = empno; --使用LEVEL,以及LPAD生成樹狀報告 SELECT LEVEL,ename, LPAD(ename, LENGTH(ename) + LEVEL
*8, ' ') FROM emp START WITH empno = 7839 CONNECT BY PRIOR empno = mgr; --排除某幾行資料:使用WHERE新增限制條件 1.查詢7839管理的所有下級員工資訊,但是不包括SCOTT的資訊 SELECT LEVEL, ename, LPAD(ename, LENGTH(ename) + LEVEL * 8, ' ') FROM emp WHERE ename <> 'SCOTT' START WITH empno = 7839 CONNECT BY PRIOR empno = mgr; --使用CONNECT BY新增限制條件 2.查詢7839管理的所有下級員工資訊,但是不包括BLAKE以及BLAKE所有下屬的資訊 SELECT LEVEL, ename, LPAD(ename, LENGTH(ename) + LEVEL * 8, ' ') FROM emp START WITH empno = 7839 CONNECT BY PRIOR empno = mgr AND ename <> 'BLAKE';