資料庫開發基礎---層次查詢
---公交站點,從A站點開始,能夠到達哪些站點?
create table bus(
dstart varchar2(4),
dend varchar2(4)
);
insert into bus values('A','B');
insert into bus values('B','C');
insert into bus values('A','D');
insert into bus values('D','M');
insert into bus values('C','E');
insert into bus values('F','M');
commit;
-----要求:將路線列示出來
select * from bus;
層次查詢基本語法:
select [level], column, expr...from table [where condition] start with condition
connect by [prior column1= column2 | column1 = prior column2];
level
---可以查詢出scott這個員工的上級領導
select level,
empno,
ename,
mgr,
CONNECT_BY_ROOT ename,
SYS_CONNECT_BY_PATH(ename, '/')
from emp
start with ename is not null
connect by prior empno = mgr;
-----SYS_CONNECT_BY_PATH這個函式是oracle9i才新提出來的!它一定要和connect by子句合用!第一個引數是形成樹形式的欄位,第二個引數是父級和其子級分隔顯示用的分隔符!
-----START WITH 代表你要開始遍歷的的節點!
----CONNECT BY PRIOR 是標示父子關係的對應!CONNECT_BY_ROOT透過這個操作,可以獲取樹形查詢根記錄的欄位 ,實現樹狀查詢 左邊的為父接點,右邊為自接點
----CONNECT_BY_ROOT是指以ename為根向後進行遍歷,所遍歷到的上一層
SELECT level,ename "Employee", CONNECT_BY_ROOT ename "Manager",CONNECT_BY_ISLEAF isleaf,
LEVEL-1 "Pathlen", SYS_CONNECT_BY_PATH(ename, '/') "Path"
FROM emp
start with ename IS NOT NULL -------可以查詢哪一位員工下屬員工具體有哪些人
CONNECT BY PRIOR empno = mgr
ORDER BY "Employee",level, "Manager", "Pathlen", "Path";
透過以上例子就很容易得到公交路線查詢思路如下:
select dstart,dend,row_number()over(partition by dstart order by null) rn1,row_number()over(partition by dend order by null) rn2 FROM BUS;
---方法一:
select dstart, wmsys.wm_concat(dend) from bus group by dstart---可以列示出所有已起點可以到達的終點站
---方法二:
select dstart,dend, CONNECT_BY_ISLEAF isleaf,
sys_connect_by_path(dstart, '->')||'-'||dend "Path"
FROM bus
START WITH dstart IS NOT NULL
CONNECT BY PRIOR dend =dstart;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30018455/viewspace-1389698/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫開發基礎--層次查詢+資料庫
- 資料庫基礎查詢--單表查詢資料庫
- MySQL資料庫基礎——多表查詢:子查詢MySql資料庫
- 【--SQL基礎-->層次化查詢(START BY ... CONNECT BY PRIOR)】SQL
- 資料庫——基礎(資料庫操作,表格操作)——增加高階查詢資料庫
- 《資料庫》基礎題一:兩表相關查詢資料庫
- php基礎之連線mysql資料庫和查詢資料PHPMySql資料庫
- CDA資料分析師 - SQL資料庫基礎 查詢&連線SQL資料庫
- Oracle層次化查詢Oracle
- java 查詢資料庫並生成多層childrenJava資料庫
- 資料庫開發基礎---行列轉換資料庫
- 0629_層次查詢
- AndoridSQLite資料庫開發基礎教程(10)SQLite資料庫
- AndoridSQLite資料庫開發基礎教程(9)SQLite資料庫
- AndoridSQLite資料庫開發基礎教程(8)SQLite資料庫
- AndoridSQLite資料庫開發基礎教程(7)SQLite資料庫
- AndoridSQLite資料庫開發基礎教程(6)SQLite資料庫
- AndoridSQLite資料庫開發基礎教程(5)SQLite資料庫
- AndoridSQLite資料庫開發基礎教程(4)SQLite資料庫
- 資料庫開發基礎---常見面試題資料庫面試題
- 資料庫查詢資料庫
- oracle資料庫sql查詢檢視第二次查詢很慢Oracle資料庫SQL
- 資料庫 - 資料查詢資料庫
- 併發查詢資料庫問題資料庫
- 資料庫資料的查詢----連線查詢資料庫
- 測試驅動開發(TDD)—— 資料庫查詢篇資料庫
- 『動善時』JMeter基礎 — 43、JMeter對資料庫的查詢操作JMeter資料庫
- Andorid SQLite資料庫開發基礎教程(3)SQLite資料庫
- Andorid SQLite資料庫開發基礎教程(2)SQLite資料庫
- Andorid SQLite資料庫開發基礎教程(1)SQLite資料庫
- 資料庫高階查詢之子查詢資料庫
- SQL Server:基於WEB的資料庫查詢SQLServerWeb資料庫
- 求助:資料庫查詢資料庫
- ThinkPHP 資料庫查詢PHP資料庫
- 查詢資料庫大小資料庫
- 資料庫排序查詢資料庫排序
- Jemter查詢資料庫資料庫
- 資料庫 - 連線查詢、巢狀查詢、集合查詢資料庫巢狀