1. 程式人生 > >LeetCode:資料庫技術【175—178】

LeetCode:資料庫技術【175—178】

LeetCode:資料庫技術【175—178】

LeetCode已經刷完200道題目,但這只是開始,下一段時間,仍然把刷題作為重點,爭取再次完成200道,本篇部落格將會帶大家熟悉一些資料庫面試題,從簡單到複雜,並且會把相關知識點全部闡述一下。

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

題目分析

  首先題目說了,不管person是否有地址資訊,都要顯示4列資訊,那麼就是說第二張表允許顯示NULL資料。這裡涉及的知識點是聯結查詢中的外部聯結:

外部聯結

  許多聯結將一個表中的行與另一個表中的行相關聯。但有時候會需要包含沒有關聯行的那些行。例如本題。聯結包含了那些在相關表中沒有關聯行的行。這種 型別的聯結稱為外部聯結

SELECT FirstName, LastName, City, State
FROM Person LEFT OUTER JOIN Address
ON Person.PersonId = Address.PersonId;

  首先使用了關鍵字OUTER JOIN 來指定聯結的型別為外部聯結,必須使用RIGHT或LEFT關鍵字指定包括其所有行的表(RIGHT指出的是OUTER JOIN右邊的表,而LEFT 指出的是OUTER JOIN左邊的表)。也即是說,OUTER JOIN的兩邊分別是兩張表,LEFT或RIGHT說了那張表的資料必須給出,另一張表的資料可以為NULL。