oracle 內連接(inner join)、外連接(outer join)、全連接(full join)

建表語句:

create table EMPLOYEE
(
EID NUMBER,
DEPTID NUMBER,
ENAME VARCHAR2(200)
)


create table DEPT
(
DEPTID NUMBER,
DEPTNAME VARCHAR2(200)
)


oracle中的連接可分爲,內連接(inner join)、外連接(outer join)、全連接(full join),不光是Oracle,其他很多的數據庫也都有這3種連接查詢方式

一、內連接inner join,這是我們經常用的查詢方式,比如select * from A inner join B on A.field1=B.field2,個人認爲,這樣的內連接查詢與下面的查詢等效,select * from A,B where A.field1=B.field2,內連接查詢只能查詢出匹配的記錄,匹配不上的記錄時無法查詢出來的 。

select * from dept inner join employee on dept.deptid=employee.deptid

select * from dept , employee where dept.deptid=employee.deptid

二、外連接outer join,可進一步分爲左外連接left outer join和右外連接right outer join,具體說一下左外連接和右外連接查詢的特點,有2個表,部門表和職工表,一個部門下可以有多個職工,一個職工只能對應一個部門,所以部門和職工時1對多的關係,設計表如下


比如現在有需求1,要進行部門表和職工表的關聯查詢,並要查詢出所有的部門信息,這時候,下面的左連接查詢就能夠查詢出想要的結果,左連接就是以left join前面的表爲主表,即使有些記錄關聯不上,主表的信息能夠查詢出來的

select * from dept left outer join employee on dept.deptid=employee.deptid

比如現在有需求2,要進行部門表和職工表的關聯查詢,並要查詢出所有的職工信息,這時候,下面的右連接查詢就能夠查詢出想要的結果,右連接就是以right join後面的表爲主表,即使有些記錄關聯不上,主表的信息能夠查詢出來

select * from dept right outer join employee on dept.deptid=employee.deptid


在介紹另外的一種寫法,同樣達到外連接的效果,大家可以嘗試使用。比如在需求1中,下面的查詢語句與需求1中給出的左連接語句等效!

select * from dept ,employee where dept.deptid=employee.deptid(+)

總之,外連接就是在關聯不上的時候,把其中的部分信息查詢出來


三、全連接full join,語法爲full join ... on ...,全連接的查詢結果是左外連接和右外連接查詢結果的並集,即使一些記錄關聯不上,也能夠把部分信息查詢出來

select * from dept full join employee on dept.deptid=employee.deptid


select * from dept full join employee on 1=1

 

 

發佈了76 篇原創文章 · 獲贊 1 · 訪問量 9331
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章