【Leetcode】175. 組合兩個表

題目

表1: Person

+-------------+---------+
| 列名         | 類型     |
+-------------+---------+
| PersonId    | int     |
| FirstName   | varchar |
| LastName    | varchar |
+-------------+---------+

PersonId 是上表主鍵

表2: Address

+-------------+---------+
| 列名         | 類型    |
+-------------+---------+
| AddressId   | int     |
| PersonId    | int     |
| City        | varchar |
| State       | varchar |
+-------------+---------+
AddressId 是上表主鍵

編寫一個 SQL 查詢,滿足條件:無論 person 是否有地址信息,都需要基於上述兩表提供 person 的以下信息:

FirstName, LastName, City, State

題解

由於FirstName, LastName, City, State 來自兩個不同的 table, 所以要用join。由於要求必須顯示人名,即使沒有地址相關信息,說明要用LEFT JOIN。左連接即是將左邊表中的數據全部查找出來。數據庫會以左邊爲基礎,與右邊表做笛卡爾乘積。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均爲空值。

select FirstName, LastName, City, State
from Person left join Address on Person.PersonId=Address.PersonId

LEFT JOIN或LEFT OUTER JOIN 左連接

左向外聯接的結果集包括 LEFT OUTER子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均爲空值。

RIGHT JOIN 或 RIGHT OUTER JOIN 右鏈接

右向外聯接是左向外聯接的反向聯接。將返回右表的所有行。如果右表的某行在左表中沒有匹配行,則將爲左表返回空值。

FULL JOIN 或 FULL OUTER JOIN 全聯接

完整外部聯接返回左表和右表中的所有行。當某行在另一個表中沒有匹配行時,則另一個表的選擇列表列包含空值。如果表之間有匹配行,則整個結果集行包含基表的數據值。

熱門閱讀

圖片描述

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