Oracle當中層次查詢

層次查詢的概念

語法格式:

   select [level],column, expr... from table

  [where condition]

  start with condition

  connect by [prior column1= column2 |

  column1 = prior column2];

層次查詢是通過start withconnect by子句標識的:

1、其中level關鍵字是可選的,表示等級,1表示root,2表示rootchild,其他相同的規則。

2From之後可以是table,view但是隻能是一個table

3Where條件限制了查詢返回的行,但是不影響層次關係,屬於將節點截斷,但是這個被截斷的節點的下層child不受影響。

4Start with是表示開始節點,對於一個真實的層次關係,必須要有這個子句,但是不是必須的。

5connect by prior是指定父子關係,其中prior的位置不一定要在connect by之後,對於一個真實的層次關係,這也是必須的。

示例:在自連接中,數據量大的話會出現笛卡爾集的情況

SQL> --通過表的別名,將同一張表視爲多張表

SQL> select e.ename||'的老闆是'||b.ename

  2  from emp e,emp b

  3  where e.mgr=b.empno;

結果:


爲了避免這種情況的發生,就使用Oracle當中的層次查詢,那下面呢,我就這張圖畫一張樹形關係圖

2

層次查詢示例:

SQL> --執行層次查詢

SQL> select level,empno,ename,mgr

  2  from emp

  3  connect by prior empno=mgr

  4  start with mgr is null

  5  order by 1;

結果:

3


發佈了37 篇原創文章 · 獲贊 10 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章