數據庫中左連接,右連接,內外連接以及自連接各自的用處

 數據庫讓我們生活變得越來越方便,尤其是它的插入信息以及對信息的更新,而它最迷人的地方毫無疑問是它強大的查詢服務,當然也是最複雜的一塊。這種複雜是建立在多表查詢的基礎之上的,計算機內部需要同時對多張表進行連接,通過笛卡爾積的方式生成所有可能的匹配結果然後再在結果里根據條件篩選出想要的結果。這其中就包括左、右連接,內、外連接以及自連接,下面是詳細描述:

左連接:

  左連接(left join)即爲兩張表進行連接時,是以處於left join語句左側的表爲基準去匹配left join語句右邊的表,如果左表中的一條數據在右表中能找到與之對應的一條數據,那麼就會出現在以虛表形式存在的結果表中,如果沒有找到,那麼會以null來代替右表中的數據去匹配左表。這樣會有一個鮮明的對比,左表中的每一條數據中的對象在右表中的某個屬性的存在性是一目瞭然的。同時在使用on 進行連接時,on的作用僅僅是進行兩張表的上訴連接,發揮匹配的功能,它選出來的是滿足這種匹配的所有結果,而並不一定是用戶所需要的,這時候就要使用where進行條件判斷,從而篩選出真正需要的信息。

右連接:

  右連接(right join)本質上是相當於將上述的左連接的這個過程反過來,以連接語句right join右側的表爲基準去匹配左邊的表,剩下的道理是一樣的,不再贅述。

內連接:

  內連接(inner join)就是在用兩張表進行匹配的時候,如果表中任意一條數據在另一張表中都是找不到對應數據的話,那麼在結果表中是不會有這一條數據的。也就是說必須是兩張表中任意兩條能夠互相對應着的數據才能被存入到結果表中,有點類似於取交集的味道。這種適用於一旦某條數據爲空便沒有意義的場景,這時給它設成null也就毫無意義了。表中的數據也因此顯得簡練很多。

外連接:

  外鏈接(outer join)與內連接是相反的,就是說,如果某張表中的數據在另一張中找不到對應的條目並不影響它依然出現在查詢的結果中,這對於兩張表都是滿足的,兩邊都有出現null的可能,這就有一點數學裏的並集的意思。

自連接:

  自連接(self join)可能看起來有點晦澀難懂,但是實際上換個角度你就會豁然開朗,你可以把它這個過程想象成兩張一樣的表進行左連接或右連接,這樣就會簡單多了,其中一張表通過設別名的方式成爲了虛表,但是共享原標中的信息。應用場景是這樣的,就是表的一個字段和另一個字段是相同性質的東西,譬如員工與上司,他們本質也都是員工,在員工表中,員工的直接上司編號會以另一個字段的形式出現,但是他的上司的編號也是會出現在員工編號這個字段裏。那麼在這種情況下,假如需要去查詢某一位員工的上司的信息,在已知該員工編號的條件下,可以根據他的編號去獲得上司的編號,進而通過上司的編號去獲得上司的信息。下面可以舉個例子:

  empId      empName      empLeaderId

    1             張三                   4

    2             李四                   7

    3             王麻子               7

    4             陳六                   8

    5             王五                   7

    6             王八                   8

    7        郝九      8

    8     M416     null

上面的表名爲Employee,那麼我要查詢李四的上司的信息,對應的sql語句應該是這樣的:select *from  Employee e1 left join Employee e2 on e1.empLeaderId=e2.empId where e1.empId=2;

   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章