日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle中 sql语句:start with .. connect by prior.. 用法

發布時間:2023/12/18 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle中 sql语句:start with .. connect by prior.. 用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

我們經常會將一個比較復雜的目錄樹存儲到一個表中。或者將一些部門存儲到一個表中,而這些部門互相有隸屬關系。這個時候你就會用到connect by prior start with。oracle 提供了start with connect by 語法結構可以實現遞歸查詢。

?

connect by 是結構化查詢中用到的,其基本語法是:

  select ... from tablename start with 條件1

  connect by prior 條件2

  where 條件3;

  例:

  select * from table

  start with org_id = 'HBHqfWGWPy'

  connect by prior org_id = parent_id;

  簡單說來是將一個樹狀結構存儲在一張表里,比如一個表中存在兩個字段:

  org_id,parent_id那么通過表示每一條記錄的parent是誰,就可以形成一個樹狀結構。

  用上述語法的查詢可以取得這棵樹的所有記錄。

  其中:

  條件1 是根結點的限定語句,當然可以放寬限定條件,以取得多個根結點,實際就是多棵樹。

  條件2 是連接條件,其中用PRIOR表示上一條記錄,比如 CONNECT BY PRIOR org_id = parent_id就是說上一條記錄的org_id 是本條記錄的parent_id,即本記錄的父親是上一條記錄。

  條件3 是過濾條件,用于對返回的所有記錄進行過濾。

?

例如:

沒有加中start with ... connect by prior ...的查詢結果:

select t.dim_id, t.pid, level

from pmcode.pmcode_fj_tree_rl t

where t.dim_id in (select b.dim_id

? ? ? ? ? ? ? ? ? ? ? from pmcode.PMCODE_KPI_DIM_OD b

? ? ? ? ? ? ? ? ? ? ?where b.kpi_id = 'KC0011')

結果:

DIM_ID PID LEVEL

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

1024 5003 0

1070 0 0

5003 1070 0

5006 0 0

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

增加start with ... connect by prior ...以后的結果:

select t.dim_id, t.pid, level

from pmcode.pmcode_fj_tree_rl t

where t.dim_id in (select b.dim_id

? ? ? ? ? ? ? ? ? ? ? from pmcode.PMCODE_KPI_DIM_OD b

? ? ? ? ? ? ? ? ? ? ?where b.kpi_id = 'KC0011')

start with t.dim_id = '1070' ----表示從dim_id = '1070'開始(也就是說1070為根節點)

connect by prior t.dim_id = t.pid; ----表示上條記錄的dim_id等于本條記錄的pid

結果:

DIM_ID PID LEVEL

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

1070 0 1

5003 1070 2

1024 5003 3

?

又如:

?

1. 一個簡單舉例:
SQL> select *??from test;

BILL_MONTH???????????DAY_NUMBER MSISDN
-------------------- ---------- --------------------
200803????????????????????????1 13800
200803????????????????????????3 13800
200803????????????????????????2 13800
200803????????????????????????2 13801
200803????????????????????????4 13804
200803????????????????????????5 13804
200803????????????????????????7 13804
200803????????????????????????8 13804
200803????????????????????????6 13802
200803????????????????????????6 13801
200803????????????????????????7 13801
200803????????????????????????8 13801

12 rows selected

SQL>
SQL> select * from test
??2???????start with day_number=1
??3???????connect by??prior day_number=day_number-1 and prior msisdn= msisdn
??4??????;

BILL_MONTH???????????DAY_NUMBER MSISDN
-------------------- ---------- --------------------
200803????????????????????????1 13800
200803????????????????????????2 13800
200803????????????????????????3 13800

SQL>


上面的語句查找出了從1開始,并且day_number 逐漸+1 遞增的,并且 msisdn 相同的哪些個數據.


2. start with??connect by 語法結構
?如上面說看到的 例子, 其語法結構為??start with condition??connect by??condition (含 prior 關鍵字)
start with conditon 給出的seed 數據的范圍, connect by??后面給出了遞歸查詢的條件,prior 關鍵字表示父數據,prior 條件表示子數據需要滿足父數據的什么條件。

在下面的這個start with connect by 結構中,就表示 查找出了從1開始,父數據的day_number等于子數據的day_number-1而且父數據的msisdn=子數據的msisdn.

start with day_number=1
?????connect by??prior day_number=day_number-1 and prior msisdn= msisdn

?

?

?

?

總結

以上是生活随笔為你收集整理的oracle中 sql语句:start with .. connect by prior.. 用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。