Oracle筆記12——Oracle層次查詢
阿新 • • 發佈:2021-10-29
層次查詢(分級查詢)
一般格式:
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';