携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第28天,点击查看活动详情
一、题目
表: Person
+-------------+---------+
| 列名 | 类型 |
+-------------+---------+
| PersonId | int |
| FirstName | varchar |
| LastName | varchar |
+-------------+---------+
- personId 是该表的主键列。
- 该表包含一些人的 ID 和他们的姓和名的信息。
表: Address
+-------------+---------+
| 列名 | 类型 |
+-------------+---------+
| AddressId | int |
| PersonId | int |
| City | varchar |
| State | varchar |
+-------------+---------+
- addressId 是该表的主键列。
- 该表的每一行都包含一个 ID = PersonId 的人的城市和州的信息。
编写一个SQL查询来报告 Person 表中每个人的姓、名、城市和州。如果 personId 的地址不在 Address 表中,则报告为空 null 。
以 任意顺序 返回结果表。
查询结果格式如下所示。
示例 1:
输入:
Person表:
+----------+----------+-----------+
| personId | lastName | firstName |
+----------+----------+-----------+
| 1 | Wang | Allen |
| 2 | Alice | Bob |
+----------+----------+-----------+
Address表:
+-----------+----------+---------------+------------+
| addressId | personId | city | state |
+-----------+----------+---------------+------------+
| 1 | 2 | New York City | New York |
| 2 | 3 | Leetcode | California |
+-----------+----------+---------------+------------+
输出:
+-----------+----------+---------------+----------+
| firstName | lastName | city | state |
+-----------+----------+---------------+----------+
| Allen | Wang | Null | Null |
| Bob | Alice | New York City | New York |
+-----------+----------+---------------+----------+
-
解释:
-
地址表中没有 personId = 1 的地址,所以它们的城市和州返回 null。
-
addressId = 1 包含了 personId = 2 的地址信息。
-
来源:力扣(LeetCode)
-
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、解题思路
创建数据表
根据题意创建Person表和Address表,并设置各自的主键
CREATE TABLE Person(
PersonId INT PRIMARY KEY,
FirstName VARCHAR(20),
LastName VARCHAR(20)
);
CREATE TABLE Address(
AddressId INT PRIMARY KEY,
PersonId INT,
City VARCHAR(20),
State VARCHAR(20)
);
INSERT INTO Person VALUES
(1,'Wang','Allen'),
(2,'Alice','Bob');
INSERT INTO Address VALUES
(1,2,'New York City','New York'),
(2,3,'Leetcode','California');
题解
上题讲要查看Person 表中每个人的姓、名、城市和州。如果 personId 的地址不在 Address 表中,则报告为空 null 。首先因为要Person的所有数据,那么选择要么inner JOIN ON或者LEFT JOIN ON,这里不存在为null,那么久选择LEFT JOIN ON
SELECT FirstName,LastName,City,State FROM
Person p LEFT JOIN Address a ON p.`PersonId` = a.`PersonId`
在写的过程中给Person和Address假名
- 数据表显示
三、执行语句
测试结果
四、总结
INNER JOIN ON
内联查询:返回符合条件的交集
INNER JOIN .... ON ...
LEFT JOIN ON
左连接查询:返回左表全部数据以及符合条件的右表数据
LEFT JOIN .... ON
RIGHT JOIN ON
右连接查询:返回右表所有数据以及左表符合条件的数据
RIGHT JOIN ... ON
SELF JOIN ON
自连接查询: 返回自己表中符合数据的集合
SELF JOIN .... ON