iT邦幫忙

2022 iThome 鐵人賽

DAY 19
0

今日課程內容
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 又可以分為

  • LEFT (OUTER) JOIN
  • RIGHT (OUTER) JOIN
  • FULL 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方式的差別
但也說不出明確的不同

沒關係,讓我們帶著些許疑問
明天繼續學習吧/images/emoticon/emoticon12.gif


上一篇
Day 18 SQL語法 - INNER JOIN
下一篇
Day20 SQL語法 - IS NULL & IS NOT NULL
系列文
新手村的練功筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言