一:Oracle常用的串連查詢方法(以oracle內建的表做的練習)
1、左外串連(left outer join/left join)
left join是以左表的記錄為基礎的,左表中的記錄會全部顯示,右表只顯示符合查詢條件的記錄。右表不足的地方用null填充。
例如:select * from emp t1 left join dept t2 on t1.deptno=t2.deptno;
左外串連可以用(+)來實現,哪一個表後面有‘(+)’表示這張表是匹配表,用‘(+)’就用關鍵字where
例如:select * from emp t1 left join dept t2 on t1.deptno=t2.deptno;
2、右外串連(right outer join/right join)
right join 是以右表的記錄為基礎的,右表的記錄會全部顯示,左表只顯示符合查詢條件的記錄,左表不足的地方用null填充。
例如:select * from emp t1 left join dept t2 on t1.deptno=t2.deptno;
右外串連可以用‘(+)’實現,用‘(+)’要用where關鍵字。
左/右外串連的兩種方式的區別:用‘(+)’實現,左/右表為全表掃描,右/左表為索引掃描。用另外一種方式為兩個表都是全表掃描。
3、全外串連(full outer join/full join)
左表和右表都不做限制,所有記錄都顯示,兩表不足的地方用null填充。全外串連不支援(+)這種寫法。
例如:select * from dave a full join bl b on a.id = b.id;
4、自串連
自串連是sql語句中經常用到的串連方式,使用自串連可以將自身表的一個鏡像當作另外一個表來對待,從而能夠得到一些特殊的資料。
例如:查詢emp表的員工的姓名和員工的經理的姓名
select t1.ename "員工",'的',t2.ename "經理" from emp t1,emp t2 where t1.mgr=t2.empno;
5、自然串連
自然串連是在兩張表中尋找那些類名和列名都相同的欄位,然後自動地將他們串連起來,並返回所有合格結果。
例如:select deptno from emp natural join dept ;
這裡並沒有指定串連的條件,實際上 oracle 為我們只做主張的將 emp表中的deptno欄位與dept表中的deptno欄位進行了串連。也就是相當於:
select deptno from emp t1 natural join dept t2 ;
6、內串連 (inner join/join)
inner join返回滿足第一個(頂端)輸入與第二個(底端)輸入聯結的每一行。這個和select查詢多表的效果一樣,所以內連結用的很少。
select t1.ename from emp t1 inner join dept t2 on t1.deptno=t2.deptno;