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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM