今天來介紹JOIN,有以下幾個模式!

  1. JOIN
  2. LEFT JOIN
  3. RIGHT JOIN
  4. FULL OUTER JOIN
  5. CROSS JOIN
SELECT aga.area_pkid, a.name, aga.subid, aga.place, aga.kind 
FROM adoption_gov_animals AS aga LEFT JOIN areas AS a 
ON aga.area_pkid = a.id;

解釋SQL

複習一下 aga.area_pkid 以這個欄位的撰寫方式,aga 是 adoption_gov_animals 的縮寫,在第二行中 adoption_gov_animals AS aga AS 關鍵字可以設定一個名稱來代表adoption_gov_animals 這張資料表

以上方查詢的程式碼來看的話是使用 LEFT JOIN 關鍵字,左右兩邊都有一張表!為了好辨識我們改成這樣。

FROM left_table LEFT JOIN right_table

所以我們現在就有 left_table 左邊資料表以及右邊資料表 right_table,等等就會以這個名詞來做講解。

第三行 ON 關鍵字告訴資料庫! 兩張表對應方式的邏輯。

結果

JOIN

JOIN 關鍵字 左邊(left_table) 以及 右邊 (right_table)有對應到數值才顯示!就是一個數學集合的概念。

結果

LEFT JOIN

以左邊為主,左邊(left_table)資料全部列出來,去對應右邊的資料表(right_table) 有對到顯示,沒有對應的值顯示 null 表示空值

結果

RIGHT JOIN

就是與LEFT JOIN 相反,以右邊的資料表(right_table) 全部列出來,不管左邊的資料表(left_table)有沒有對應值

結果

FULL OUTER JOIN

還是左邊先,左邊資料表全部查詢出來有對應到顯示對應值,沒有對到的顯示空值,如果右邊的資料表,有沒有對應到的內容,全部也一起顯示出來,左邊的表顯示空值。

結果

CROSS JOIN

把左邊的資料表與右邊資料表的每一個值做匹配,呈現出所有可能的排列組合。因為不考慮是否有無匹配,所以不需要 ON關鍵字。

結果

加入篩選

因為對應不到的值會填入 null 空值,這個值比較特別,代表這個欄位內容是空的,不是 "" 空字串,也不是數字0的意思。

我們可以用 WHERE left_table.cloumn IS NULL 來塞選出左邊來為顯示出來是null的結果。如果要找不為null的資料 使用 IS NOT NULL 即可。 不只可以運用在這邊。一般的資料表也可以這麼做篩選。

LEFT JOIN 查詢結果為例

結果

可以下 WHERE right_table.名稱 IS NULL

就會出現根 JOIN 一樣的結果

結果

結合更多資料表

上面都是以左右兩個資料表為範例,不過JOIN 是可以接很多個的喔!

Victor
Victor

哈囉!

文章: 233

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *