資料庫常見的join方式有三種

2021-04-09 00:48:08 字數 2336 閱讀 1544

hf8739768 | 07 04, 2006 15:25

資料庫常見的join方式有三種:inner join, left outter join, right outter join(還有一種full join,因不常用,本文不討論)。這三種連線方式都是將兩個以上的表通過on條件語句,拼成乙個大表。以下是它們的共同點:

1. 關於左右表的概念。左表指的是在sql語句中排在left join左邊的表,右表指的是排在left join右邊的表。

2. 在拼成的大表中,左表排在左邊,右表排在右邊。

3. on條件語句最好用=號對兩表相應的主外來鍵進行連線。當然,也可以用其他操作符,如》, <, 來連線兩表的任一字段,此時的關係將非常複雜,連線後的記錄數也隨之而變得不確定。如果在一些特殊的場合中需要用到這種方式,必須通過簡單的例項加以確認,否則,連線結果很可能不是我們所想要的!

4. on條件語句不能省略。

5. 可以連鎖使用join,每次使用join都令另一表與當前的表或連線的結果相連線。

在下文中,用到了兩個表,"部門"表與"組織"表,其中,"部門"表有一名為"組織編號"的外來鍵,指向"組織"表中的主鍵"編號"。

inner join

格式:select * from 部門 inner join 組織 on 部門.組織編號 = 組織.編號

目的:將兩表中符合on條件的所有記錄都找出來。

規律:1. 拼出的大表記錄不會增加。

2. 如果左邊與右表的關係是一對多的關係,在選出的任一記錄中,假若右表有多個記錄與其對應,那麼,連線後的左表,主鍵將不再唯一。

典型應用:將存在多關係的引用表放在左表,將存在一關係的被引用表放在右表,通過=號將主外來鍵進行連線,通過對右表設定過濾條件,選出相應的且主鍵唯一的左表記錄。

備註:inner join 是預設的連線方式,可縮寫為join。

轉化為where子句:

select * from 部門, 組織 where 部門.組織編號 = 組織.編號

left outter join

格式: select * from 部門 left join 組織 on 部門.組織編號 = 組織.編號

格式: select * from 組織 left join 部門 on 組織.編號 = 部門.組織編號

目的:將左表的所有記錄列出,右表中只要符合on條件的,與左表記錄相拼合,不符合條件的,填以null值。

規律:1. 選出所有符合條件的左表,如果左邊與右表的關係是一對一的關係,則拼成的大表記錄不會改變。

如果左邊與右表的關係是多對一的關係,則拼成的大表記錄也不會改變。

如果左邊與右表的關係是一對多的關係,則拼成的大表記錄會增加。對於每一具有一對多關係的左表記錄,如果左表1:n與右表對應,那麼會多出n-1條記錄。例如,如果左表第一條記錄1:3對應於右表,多出2條記錄。如果左表第二條記錄1:2對應於右表,則再多出1條記錄。這樣,總共多出3條記錄。其他類推。

2. 如果左邊與右表的關係是一對多的關係,在選出的任一記錄中,假若右表有多個記錄與其對應,那麼,連線後的左表,主鍵將不再唯一。

3. 如果左邊與右表的關係是一對多的關係,對於左表任一記錄,如果右表沒有記錄與其相對應,則全部填以null值。

典型應用:將存在多關係的引用表放在左表,將存在一關係的被引用表放在右表,通過對右表設定過濾條件,選出相應的且主鍵唯一的左表記錄。

備註:left outter join可用left join代替。在有些資料庫中,如hsqldb, 只能使用left join而不能使用left outter join。

轉化為where子句:

select * from 部門, 組織 where 部門.組織編號 = 組織.編號

right outter join

格式: select * from 部門 right join 組織 on 部門.組織編號 = 組織.編號

格式: select * from 組織 right join 部門 on 部門.組織編號 = 組織.編號

目的:將右表的所有記錄列出,左表中只要符合on條件的,與右表記錄相拼合,不符合條件的,填以null值。

規律:(與left outter join相反)

典型應用:可轉化成left outter join。例如

select * from 組織 right join 部門 on 部門.組織編號 = 組織.編號

與select * from 部門 left join 組織 on 部門.組織編號 = 組織.編號

的效果一樣

備註:right outter join可用right join代替。在有些資料庫中,如hsqldb, 沒有實現right join功能。

轉化為where子句:

select * from 部門, 組織 where 部門.組織編號 = 組織.編號 

資料庫常見的三種join方式

資料庫常見的join方式有三種 inner join,left outter join,right outter join 還有一種full join,因不常用,本文不討論 這三種連線方式都是將兩個以上的表通過on條件語句,拼成乙個大表。以下是它們的共同點 1.關於左右表的概念。左表指的是在sql語...

Hive的三種Join方式

reduce join在hive中也叫common join或shuffle join 如果兩邊資料量都很大,它會進行把相同key的value合在一起,正好符合我們在sql中的join,然後再去組合,如圖所示。1 大小表連線 如果一張表的資料很大,另外一張表很少 1000行 那麼我們可以將資料量少的...

Hive的三種Join方式

hive reduce join在hive中也叫common join或shuffle join 如果兩邊資料量都很大,它會進行把相同key的value合在一起,正好符合我們在sql中的join,然後再去組合,如圖所示。1 大小表連線 如果一張表的資料很大,另外一張表很少 1000行 那麼我們可以將...