今日課程內容
SQL Lesson 7: OUTER JOINs
https://sqlbolt.com/lesson/select_queries_with_outer_joins
昨天我們提到INNER JOIN
你一定會很好奇,既然有INNERR JOIN
那有沒有OUTER JOIN呢?
答案是有的
但是他們兩者有什麼區別呢
先別急,讓我們藉由做題目來體驗看看
OUTER JOIN的用法和昨天的INNER JOIN一樣
只差在JOIN的方式不同
因此OUTER JOIN 的語法如下
OUTER JOIN ... ON self.id = anohter.id
接著讓我們來實際練習看看
體會看看OUTER JOIN與INNER JOIN有什麼不同吧
我們有兩個表格 分別為Buildings 和 Employees
我們要找出所有有員工的建築物
關於員工數的數據記錄在"Employees"這個表格中
所以我們知道要從這個表格下手
還記得我們怎麼去除重複的數據嗎
沒錯 就是使用DISTINCT
因此 我們第一題的查詢語法就如下方所示
我們要查出所有的建築物物與它們所能容納的人數
觀察一下 我們要查詢的東西恰恰等於"Buildings"這個表格的內容
因此 我們只要將查詢的FROM
指向"Buildings"這個表格即可
我們需要列出所有的建築物(包含無人的建築物)與在該建築物內的員工角色(不重複)
當我們想要同時查詢兩張表格的內容 且這兩張表格的內容並非能完全關聯時
我們可以用OUTER JOIN 來處理
OUTER JOIN 又可以分為
在後續的文章中將會探討INNER JOIN 和 OUTER JOIN的不同之處
這邊我們先知道可以使用OUTER JOIN來處理兩張表格中的內容並非能完全關聯的情況
觀察左右兩張表格
我們可以看到 "Buildings" 和 "Employees"兩張表格中
Building_name 和 Building的欄位剛好可以對得上
註:由於練習網站的限制,這邊我們使用LEFT JOIN來進行以下練習
我們可以我們可以使用LEFT JOIN 來進行合併
篩選各個建築物,與員工的角色
並且可以使用DISTINCT
語法來移除重複的內容
因此結果會如下
今天的練習完成啦
你或許會觀察到第三題的建築物1w和2e對應的Role欄位是空的
為什麼會有這樣的情況呢
你有印象在昨天的INNER JOIN會有這樣的情況嗎?
或許你觀察到INNER/OUTER兩種JOIN方式的差別
但也說不出明確的不同
沒關係,讓我們帶著些許疑問
明天繼續學習吧