連線查詢分為:內連線(相等內連線,非等內連線,自連線),外連線(左外連線,右外連線,全外連線),交叉連線,自然連線
一、內連線
1、相等內連線(使用等號(=)指定連線條件的連線查詢)
①使用where關鍵字的連線查詢
select *
from 表1,表2
where 表1.欄位1=表2.欄位1;
②使用join關鍵字的連線查詢--------- [inner] join on
select *
from 表1 [inner] join 表2 on 表1.欄位1=表2.欄位1;
說明:使用join關鍵字的內連線與使用where子句的連線查詢等價,即查詢結果中只包含兩個表中相匹配的行。在on後面給出的連線條件使用等號(=)運算子比較被連線的兩張表的公共字段,其查詢結果中只包含兩表的公共字段值相等的行,列可以是兩表中任意列。
例如:顯示雇員的名稱和所在的部門的編號和名稱。
執行以下查詢:
select ename,emp.deptno,dname from emp join dept
on emp.deptno=dept.deptno;
2、非等值連線(非等內連線是在連線條件中使用除「=」運算子以外的其它運算子比較被連線的公共字段。)
例:顯示雇員名稱,工資和所屬工資等級。
執行以下查詢:
select e.ename,e.sal,s.grade from emp e,salgrade s
where e.sal between s.losal and s.hisal;
3、自連線(自連線就是乙個表,同本身進行連線。使用自連線可以將自身表的乙個映象當作另乙個表來對待,從而能夠得到一些特殊的資料。)
例:顯示雇員名稱和雇員的經理名稱。
執行以下查詢:
select worker.ename||』的經理是』||manager.ename as 雇員經理
from emp worker,emp manager
where worker.mgr=manager.empno;
執行結果為:
二、外連線
1、左外連線(左側的表中的全部資料都會被顯示出來,但是右側表的資料,
只有和左側匹配上的字段才會被查詢出來!否則都會顯示null!)
圖示:
①使用where關鍵字的左外連線查詢
例:顯示雇員的名稱、工資和所在的部門名稱及沒有屬於任何部門的雇員。
執行以下查詢:
select ename,sal,dname from emp,dept
where emp.deptno=dept.deptno(+);
--------注:emp表為主表
執行結果為:
②使用left join或left outer join關鍵字的左外連線查詢
上述操作可變為:
select ename,sal,dname from emp left join dept
on emp.deptno=dept.deptno;
2、右外連線( 右側的表中的全部資料都會被顯示出來,但是左側表的資料,
只有和右側匹配上的字段才會被查詢出來!否則都會顯示null!)
圖示:①使用where關鍵字的右外連線查詢
例:顯示雇員的名稱、工資和所在的部門名稱及沒有任何雇員的部門。
執行以下查詢:
select ename,sal,dname from emp,dept
where emp.deptno(+)=dept.deptno;
執行結果為:②使用right join或right outer join關鍵字的右外連線查詢
上述操作變為:
select ename,sal,dname from emp right join dept
on emp.deptno=dept.deptno;
3、全外連線(這種是左外連線和右外連線的並集,可完全顯示兩個表,且沒有匹配的記錄為空。)
-------full/all outer join
圖示:
例:使用emp表和dept表執行完全外連線查詢。
select ename,sal,dname from emp full join dept
on emp.deptno=dept.deptno;
執行結果為:
三、交叉連線(表與表之間做笛卡爾積查詢!,交叉連線不帶on子句,它返回被連線的兩個表所有資料行的笛卡爾積,返回到 結果集合中的資料行數等於第乙個表中符合查詢條件的資料行數乘以第二個表中符合查 詢條件的資料行數。)
例:
select * from emp cross join dept;
等同於:
select * from emp ,dept;
四、自然連線(屬性值相同的就保留下來,如果屬性值不相同則去掉,連線後的表的屬性值個數為原來兩個表的屬性之和減去公共屬性的個數,如果兩個表沒公共屬性則自然連線就是笛卡爾乘積。)
select * from emp natural join dept;
等同於:
select * from empt, dept where emp.deptno=dept.deptno;
參考部落格: Oracle多表連線查詢
兩張表沒有連線條件時 這個看情況用,資料多的時候沒有做過驗證 select a.b.from select row number over order by id as rn,from a a left outer join select row number over order by id as...
Oracle查詢多表連線
oracle多表連線查詢資料主要分3類 一 交叉連線 表a有3條資料,表b有4條資料,交叉連線後有12條資料 select empno,ename,sal,emp.deptno,dname from emp cross join dept select empno,ename,sal,emp.dep...
Oracle多表連線與子查詢
1 等值連線 迪卡爾集連線 select ename,a.deptno as a deptno,b.deptno as b deptno b.dname as 部門 from emp a,dept b 等值連線 select ename,a.deptno as a deptno,b.deptno a...