也談SQL各種連線(JOIN)

2021-05-14 09:33:20 字數 1842 閱讀 9547

最近公司在招人,同事問了幾個自認為資料庫可以的應聘者關於庫連線的問題,回答不盡理想~

現在在這寫寫關於它們的作用

假設有如下表:

乙個為投票主表,乙個為投票者資訊表~記錄投票人ip及對應投票型別,左右連線實際說是我們聯合查詢的結果以哪個表為準~

1:如右接連 right join 或 right outer join:

我們以右邊voter表為準,則左表(votemaster)中的記錄只有當其id在右邊(voter)中存在時才會顯示出來,如上圖,左邊中id為3.4.5.6因為這些id右表中沒有相應記錄,所以沒有顯示!

2:因此我們自然能理解左連線 left join 或者 left outer join

可見,現在右邊中id在中存在時才會顯示,當右邊中沒有相應資料時則用null代替!

3:全連線 full join 或者 full outer join,為二個表中的資料都出來,這裡演示效果與上一樣!

4:內連線 inner join 或者 join;它為返回欄位id同時存在於表votemaster 和 voter中的記錄

5:交叉連線(完全連線)cross join 不帶 where 條件的

沒有 where 子句的交叉聯接將產生聯接所涉及的表的笛卡爾積。第乙個表的行數乘以第二個表的行數等於笛卡爾積結果集的大小。(table1和table2交叉連線產生6*3=18條記錄)

等價select vm.id,vm.votetitle,vt.ip from votemaster as vm,voter as vt

6:自連線。在這裡我用我前段時間乙個電力專案中的例子(改造過)

如下表:

這是乙個部門表,裡面存放了部門及其上級部門,但都放在同一張表中,我們假設現在需要用sql查詢出各部門及其上級部門!就如何做,

當然,不用自連線也一樣,可以如下:

我們達到預期目的!在這個查詢中使用了乙個子查詢完成對上級部門名的查詢,如果使用自連線,那麼結構上感覺會清晰很多。

是不是也同樣完成了功能呢,這裡除了使用自連線外,還使用了左連線,因為省電力沒有上級部門,他是老大,如果使用內連線,就會把這條記錄過濾掉,因為沒有和他匹配的上級部門。

自連線用的比較多的就是對權形結構的查詢!類似上表!

sql的各種join連線

1 select from tablea inner join tableb 2 on tablea.name tableb.name 3id name id name 4 51 pirate 2 pirate 63 ninja 4 ninja78 9inner join 10產生的結果集中,是a和...

SQL的各種連線Join詳解

sql join 子句用於把來自兩個或多個表的行結合起來,基於這些表之間的共同字段。最常見的 join 型別 sql inner join 簡單的 join sql left join sql right join sql full join,其中前一種是內連線,後三種是外鏈結。假設我們有兩張表,t...

SQL的各種連線Join詳解

sql join 子句用於把來自兩個或多個表的行結合起來,基於這些表之間的共同字段。最常見的 join 型別 sql inner join 簡單的 join sql left join sql right join sql full join,其中前一種是內連線,後三種是外鏈結。假設我們有兩張表,t...