SQL Join總覽(Windows SQL Server 2008 R2)

SQL Join總覽(Windows SQL Server 2008 R2)
Overview of SQL Join(Windows SQL Server 2008 R2)

前言:
這篇文章其實早該寫了,因為過去在產學公司比較多的業務內容都在依照主管需求串接(Join)不同表格,達到管理需求。這句話說得簡單,但並非每個生產管理者都一定理解資料庫的結構,而對我而言,這些資料庫都是由軟體供應商所建置,我也需要了解各個表格之間的邏輯,才能再運用這些資料轉化成所需的資訊。
因此,本篇文章要談的Join就是把管理者的邏輯,變成我們撈取資料庫的邏輯的關鍵,有鑑於網路上的資料都是比較片段,本篇會希望用比較簡單的圖示,讓各位一目瞭然各個Join語法的不同,不論是實務應用、面試求職這個Join的語法觀念都非常重要,也希望本篇文章能幫到大家。

正文:
那麼本篇是針對Window SQL Server 2008 R2(後稱2008 R2)為基礎的撰寫方法,各個資料庫可能會有一些特別的Join各位需要可能要去查查官方的定義。

在進入Join前,先用一張圖片讓各位了解JoinUnion兩者的差異,前者是垂直整合,後者是水平整合,從下方圖片就能明顯看到差異。
 
Join垂直整合概念圖


Union水平整合概念圖


可以看到,Join在上面的範例透過工號這個主鍵(Primary Key)進行連接,將員工基本資料與出勤資料進行連結,進而產生員工出勤的資料;而Union則是將不同表格,但相同屬性的欄位,合併成為單一一張表格。因此,雖然都是整合成一張表格,但意義上是非常不同的。

搞清楚JoinUnion的差異後,我們來深入談談在2008 R2Join
引述《SQL Server 2008 R2資料庫實務應用》[1]對於Join所做的說明:
它透過兩個資料表間共同欄位的方式來關聯兩個資料表,這種關聯通常是建立在所謂主鍵-外鍵的關係上,也就是說一個資料表的外部索引鍵(Foreign key)欄位參考到另一個資料表的主索引鍵欄位(Primary key),根據這兩個欄位的共同執來建立兩個資料表的關聯關係。

而我們常使用的Join(本篇翻作連接,在[1]中翻成合併容易與Union搞混,為避免誤會故更改翻譯)是用來進行多個資料表間關聯的連接運算,而他又可以細分成以下4:


  • 內部連接關聯(Inner Join)
  • 外部連接關聯(Outer Join),又可細分為左邊外部連接關聯(Left Outer Join)與右邊外部連接關聯(Right Outer Join)
  • 交叉合併關聯(Cross Join)
  • 自身合併關聯(Self Join)


  • 根據我自己使用起來的頻率,又以前面兩種為大宗,且邏輯最需要作為區分,因此我繪製了下圖,讓各位快速了解Inner JoinLeft JoinRight Join所取出的資料差異。
     

    上圖包含了文氏圖所表明取出的資料以及SQL的語法,我特地將Left Join以及Right Join的聯集的地方獨立出來,因為這個是三者都會包含的地方,但Left Join會包含左邊表格(表格1)的但右邊表格(表格2)沒有的資料,反之,Right Join會包含右邊表格(表格2)的但左邊表格(表格1)沒有的資料。
     
    Inner JoinLeft JoinRight Join比較(文氏圖與語法)

    參考文獻:
    [1]許正憲與張嘉琪(2011)SQL Server 2008 R2資料庫實務應用。臺北市,上奇資訊

    留言

    1. 哈囉, 我有些問題想請教. 請問可以信箱聯繫嗎? :)

      回覆刪除
      回覆
      1. 您好,我的信箱是 ching93011@gmail.com
        對於本篇文章有問題,歡迎來信給予指教

        刪除

    張貼留言