oracle中的join方式彙總
概述: 平常用的左連線、右連線,都是外連線中的一種
- 所有的join連線,都可以加上類似where a.id='1'的條件,達到同樣的效果。
- 除了cross join不可以加on外,其它join連線都必須加上on關鍵字,後都可加where條件
- 雖然都可以加where條件,但是他們只在標準連線的結果集上查詢where條件
不加任何條件,原始的 TableA 和 TableB 在表中的資料記錄如下:
- 自連線示例:join,inner join,如下3個sql的執行結果都一樣
select * from TableA a inner join TableB b on a.classid=b.classid;
select * from TableA a join TableB b on a.classid=b.classid;
select * from TableA a,TableB b where a.classid=b.classid;
查詢結果:
- 左外連線示例:left join ,如下2個sql的執行結果都一樣
select * from TableA a left join TableB b on a.classid=b.classid;
select * from TableA a,TableB b where a.classid=b.classid(+);
1 --左連線 :列出左邊表全部的,及右邊表符合條件的,不符合條件的以空值代替。
2 --在(+)計算時,哪個帶(+)哪個需要條件符合的,另一個全部的。即放左即右連線,放右即左連線。
- 右外連線示例:right join ,如下2個sql的執行結果都一樣
select * from TableA a right join TableB b on a.classid=b.classid;
select * from TableA a,TableB b where a.classid(+)=b.classid;
- 右外連線示例:full join
--全連線 :產生M+N的結果集,列出兩表全部的,不符合條件的,以空值代替
select * from TableA a full join TableB b on a.classid=b.classid;
- 笛卡爾連線,cross join
-
1 --笛卡兒乘積連線 :即不加任何條件,達到 M*N 的結果集。
2 --以下兩種查詢結果一樣。
select * from TableA a cross join TableB b;
select * from TableA a,TableB b;
注意:如果cross join加上where a.classid=b.classid條件,會產生跟自連線一樣的結果:
select * from TableA a cross join TableB b on a.classid=b.classid;
create table TABLEA
(
STUID NUMBER(10) not null,
CLASSID VARCHAR2(20) not null,
STUNAME VARCHAR2(20)
)
create table TABLEB
(
CLASSID VARCHAR2(20) not null,
CLASSNAME VARCHAR2(20)
)