概述: 平常用的左連接、右連接,都是外連接中的一種
- 所有的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)
)