1.select ...connect by prior ...start with的用法:
select ... from <tablename>
where <conditional-1> --過濾條件,用於對返回的所有記錄進行過濾
start with <conditional-2> --查詢結果從起始根節點的限定條件
connect by prior <conditional-3> --串連條件
資料庫表結構如下:
create table tablename
(
id number,
root_id number,
name varchar2(50),
desc varchar2(250)
)
insert into tablename(id,root_id,name,desc) values(1,0,'root','根節點');
insert into tablename(id,root_id,name,desc) values(2,1,'childnode1','子節點1');
insert into tablename(id,root_id,name,desc) values(3,1,'childnode2','子節點2');
insert into tablename(id,root_id,name,desc) values(4,0,'root2','根節點2');
insert into tablename(id,root_id,name,desc) values(5,4,'childnodeA','子節點1');
insert into tablename(id,root_id,name,desc) values(6,4,'childnodeB','子節點2');
得到完整樹:
select * from tablename connect by prior id=root_id start with root_id=0
如果connect by prior 中的prior被省略,則查詢將不進行深層遞迴。
如:
select * from tablename connect by id=root_id start with root_id=0
2.oracle中(+) (OUTER JOIN)的用法
SELECT A.id, B.IDD FROM A, B WHERE A.id(+)=B.IDD
等價於
SELECT A.id, B.IDD FROM A RIGHT OUTER JOIN B ON ( A.id=B.IDD)
意思是 兩表關聯的時候,
B 表的資料, 全部檢索出來。
A表的資料,則是在B表有相對應的資料的情況下,才檢索出來。