1. 程式人生 > 其它 >oracle中的join方式彙總

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)
)