oracle9i學習筆記之十七 分級取回資料

2021-04-28 18:42:09 字數 2826 閱讀 2971

1.分級查詢

select   [level],column,expr...

from     table

[where   condition(s)]

[start with condition(s)]

[connect by prior condition(s)];

level:對每行返回乙個級別,對根行level偽列返回1;對孩子的level偽列返回2,以此類推

start with:指定層次的根行

connct by prior:指定查詢的方向

1)start with子句可以和任何有效的條件協同使用

start with column1=value

2)使用emp表,從名字是king的雇員開始

...start with ename='king'

...start with mgr is null

3)乙個start with條件可以包含子查詢

...start with empno=(select empno

from   emp

where  ename='king')

connect by prior column1=column2

4)使用emp表從頂向下遍歷:

...connect by prior empno=mgr

5)使用emp表從底向上遍歷:

...connect by empno=prior mgr

2.遍歷樹:

1)自頂向下遍歷

例: 

select level,empno,ename||' 雇員的經理是 '||

prior  ename "僱傭關係"

from   emp

start  with ename='king'

connect by prior empno=mgr;

結果:level  empno        僱傭關係 

1     7839    king 雇員的經理是 

2     7566    jones 雇員的經理是 king 

3     7788    scott 雇員的經理是 jones 

4     7876    adams 雇員的經理是 scott 

3     7902    ford 雇員的經理是 jones 

4     7369    smith 雇員的經理是 ford 

2     7698    blake 雇員的經理是 king 

3     7499    allen 雇員的經理是 blake 

3     7521    ward 雇員的經理是 blake 

3     7654    martin 雇員的經理是 blake 

3     7844    turner 雇員的經理是 blake 

3     7900    james 雇員的經理是 blake 

2     7782    clark 雇員的經理是 king 

3     7934    miller 雇員的經理是 clark 

2)從底向上遍歷

例: select level,empno,ename,job,mgr

from   emp

start with empno=7876

connect by empno=prior mgr;

結果:level  empno  ename  job       mgr 

1    7876   adams  clerk     7788 

2    7788   scott  analyst   7566 

3    7566   jones  manager   7839 

4    7839   king   president    

3.用level和lpad格式化分級報告

建立乙個報告,顯示公司的管理層,從最高端別開始,縮排下面跟隨的級別

例:select level,lpad(ename,length(ename)+(level*2)-2,'-') as org_chart

from   emp

start with ename='king'

connect by prior empno=mgr;

結果:level     org_chart

1        king 

2        --jones 

3        ----scott 

4        ------adams 

3        ----ford 

4        ------smith 

2        --blake 

3        ----allen 

3        ----ward 

3        ----martin 

3        ----turner 

3        ----james 

2        --clark 

3        ----miller 

4.修剪分支

1)用where子句去除乙個結點

where ename!='scott'

2)用connect by子句去除乙個分支

connect by prior

empno=mgr

and ename!='scott'

練習1.設計乙個表,記錄客戶在一段時間內所撥打**的樹形層次結構。如a使用者5點打給b使用者,5點10分打給c使用者;b使用者5點5分打給d使用者;d使用者6點打給e使用者等等

根據時間段來查詢層次關係

學習oracle9i 筆記(2)

接著上一次的筆記,我在把我一些學習oracle9i的心得繼續記錄下來,為那些剛剛學習oracle 的人,一些幫助 oracle中常用的資料型別為 常用的資料庫字段型別如下 字段型別 中文說明 限制條件 其它說明 char 固定長度字串 最大長度2000 bytes varchar2 可變長度的字串 ...

oracle 9i學習之路

oracle基本元件結構圖oracle管理後台儲存樹結構圖 引數檔案 parameter 一 9i之前版本 pfile檔案,文字格式 二 spfile檔案,二進位制格式 口令檔案 password 本地的sysdba,以作業系統認證的形式登入。遠端的sysdba,通過passwordfile認證 儲...

oracle9i學習筆記之十一(2) 索引

1.建立索引 create index index on table column column 例1 提高對emp表的ename的查詢速度 create index emp ename idx on emp ename 例2.建立基於函式的索引 create index upper idx on ...