Oracle筆記 層次查詢 Select

2021-09-01 20:15:28 字數 2037 閱讀 4355

基於樹狀結構的資料查詢成為層次查詢。

層次化查詢的基本語法:

select 列名1,列名2 from 表名 start with 開始條件 connect by 遞迴條件
如上圖mark表,使用market_id和parent_market_id將平行的資料變成了樹狀型。

eg:查詢表中所有亞洲的市場資訊表。

select market_id,market_name from market start with market_name = '亞洲' connect by prior market_id = parent_market_id;

//start with market_name = '亞洲'指查詢的起始點為market = '亞洲',

//connect by prior market_id = paret_market_id指前一條記錄的market_id等於後一條記錄的parent_market_id;

//prior指定樹的生成方式(後面詳說)。

//查詢的結果就為:亞洲,中國,南韓,朝鮮,北京。

sys_connect_by_path(列名,分隔符):層次化查詢總是以某條記錄作為起始點,根據connect by指定的條件遞迴獲得集合。此函式可對所查詢的結果集進行聚合操作(僅限於字串)。列名指定對那個列進行合併,分隔符則指定字元拼接在一起用的符號。

select market_id,market_name sys_connect_by_path(market_name,'/') market_path from market start with market_name = "北京" connect by prior parent_market_id = market_id;

//prior很重要,如果沒有這個字段,則只會顯示第一條查詢的內容,後面的不會顯示了。

查詢結果如下:

max():獲得最完整的路徑:

select max(sys_connect_by_path(market_name,'/')) market_path from market start with market_name = "北京" connect by prior parent_market_id = market_id;

//查詢出的結果為上圖第四條,也就是/北京/中國/亞洲/全球。

二進位制轉十進位制:

實質就是從最後一位開始算,依次列為第0、1、2...位第n位的數(0或1)乘以2的n次方。

如101,轉換就是1*2的0次方+0*2的1次方+1*2的二次方=5.

oralce自帶函式bin_to_number();

select bin_to_num(1,0,1) a,bin_to_num(1,0) b from dual;
sql:

select sum(data) from (select substr('101',rownum,1) * power(2,length('101') - rownum) data from dual connect by rownum <= length('101')) ;

//substr(string , start_position,length)取得字串中指定起始位置和長度的字串

//power(m,n) m的n次方

第一次迴圈括號裡的時候,rownum=1,substr()函式取到得是1,power()取到的是4,所以整個select為4,第二次迴圈同上,為0,第三次為1,求sum為7。

oracle 學習筆記 層次查詢

以oracle自帶的orcl資料庫中scott使用者下的emp表為例。empty表的字段如下,我們關心兩個字段員工編號empni,和員工直屬上司mge。層次查詢示意圖如下,樹狀結構,葉子節點都為普通員工,其餘節點都是領導或上司。使用語法如下 要明確指出,連線關係以及開始條件 決定從樹狀結構的那個幾點...

oracle 層次查詢

1 簡介 oracle層次化查詢是oracle特有的功能實現,主要用於返回乙個資料集,這個資料集存在樹的關係 資料集中存在乙個pid記錄著當前資料集某一條記錄的id 2 層次化查詢主要包含兩個子句,乙個start with另乙個是connect by。start with 這個子句一般用於指定層次化...

oracle層次查詢

層次查詢 hierarial retrival 1.層次查詢基本概念 層次查詢是描敘乙個樹狀結構,我們可以通過層次查詢來控制自上而下,或者自下而上的查詢樹狀資料。並且還可以確定查詢起始點 start with確定開始點 connect by確定遍歷的方向。2.層次查詢語法 select level ...