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%,内存也低于官方

2020年全国计算机等级考试《二级C语言程序设计》全套资料教材+历年真题+题库+考前冲刺

动态规划:leetcode题库第四十四题

难度等级简单 -1