LeetCode175:組合兩個表

1、題目描述

SQL架構mysql

表1: Personsql

+-------------+---------+
| 列名         | 類型     |
+-------------+---------+
| PersonId    | int     |
| FirstName   | varchar |
| LastName    | varchar |
+-------------+---------+
PersonId 是上表主鍵

表2: Address架構

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

編寫一個 SQL 查詢,知足條件:不管 person 是否有地址信息,都須要基於上述兩表提供 person 的如下信息:code

FirstName, LastName, City, State

2、解題思路

  1. 由於表 Address 中的 personId 是表 Person 的外關鍵字,因此咱們能夠鏈接這兩個表。it

  2. 考慮到可能不是每一個人都有地址信息,咱們應該使用 outer join 而不是默認的 inner join;在MySql中,用 LEFT JOIN便可。table

  3. 若是沒有某我的的地址信息,使用 where 子句過濾記錄將失敗,由於它不會顯示姓名信息。ast

3、個人代碼

# Write your MySQL query statement below
SELECT 
	FirstName, LastName, City, State
FROM 
	Person 
LEFT JOIN
    Address
ON 
	Person.PersonId = Address.ONPersonId
;

4、相關知識

SQL LEFT JOIN 關鍵字:class

LEFT JOIN 關鍵字從左表(table1)返回全部的行,即便右表(table2)中沒有匹配。若是右表中沒有匹配,則結果爲 NULL。語法

SQL LEFT JOIN 語法:查詢

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;

或:

SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;

註釋:LEFT JOIN 關鍵字從左表(Websites)返回全部的行,即便右表(access_log)中沒有匹配。

另外:

  • RIGHT JOIN 關鍵字從右表(table2)返回全部的行,即便左表(table1)中沒有匹配。若是左表中沒有匹配,則結果爲 NULL。
  • FULL OUTER JOIN 關鍵字只要左表(table1)和右表(table2)其中一個表中存在匹配,則返回行.
  • FULL OUTER JOIN 關鍵字結合了 LEFT JOIN 和 RIGHT JOIN 的結果。
相關文章
相關標籤/搜索