Leetcode题库(数据库详解)难度等级-简单
Posted 鮀城小帅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode题库(数据库详解)难度等级-简单相关的知识,希望对你有一定的参考价值。
175.组合两个表
表: 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 。
以 任意顺序 返回结果表。
查询结果格式如下所示。
输入:
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 的地址信息。
题解1:左外连接
SELECT
p.firstName,
p.lastName,
a.city,
a.state
FROM
person p
LEFT JOIN address a ON p.PersonId = a.PersonId
解题步骤:
用左外连接,以左表为准,右表不符合条件默认会返回null。比如:PersonId=2的city、state字段都是空的
题解2:子查询
SELECT
p.firstName,
p.lastName,
( SELECT a.city FROM address a WHERE p.PersonId = a.PersonId ) AS city,
( SELECT a.state FROM address a WHERE p.PersonId = a.PersonId ) AS state
FROM
person p
最佳选择:左外连接,因为子查询会多次遍历数据,而连接查询只遍历一次。
以上是关于Leetcode题库(数据库详解)难度等级-简单的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode155:最小栈,最简单的中等难度题,时间超100%,内存也低于官方
LeetCode155:最小栈,最简单的中等难度题,时间击败100%,内存也低于官方
LeetCode155:最小栈,最简单的中等难度题,时间击败100%,内存也低于官方