首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【Leetcode】175. 组合两个表

【Leetcode】175. 组合两个表

作者头像
Leetcode名企之路
发布2018-11-29 18:16:19
发布2018-11-29 18:16:19
1.5K0
举报
文章被收录于专栏:Leetcode名企之路Leetcode名企之路
题目

表1: Person

代码语言:javascript
复制
+-------------+---------+
| 列名         | 类型     |
+-------------+---------+
| PersonId    | int     |
| FirstName   | varchar |
| LastName    | varchar |
+-------------+---------+

PersonId 是上表主键

表2: Address

代码语言:javascript
复制
+-------------+---------+
| 列名         | 类型    |
+-------------+---------+
| AddressId   | int     |
| PersonId    | int     |
| City        | varchar |
| State       | varchar |
+-------------+---------+
AddressId 是上表主键

编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:

代码语言:javascript
复制
FirstName, LastName, City, State

题解

由于FirstName, LastName, City, State 来自两个不同的 table, 所以要用join。由于要求必须显示人名,即使没有地址相关信息,说明要用LEFT JOIN。左连接即是将左边表中的数据全部查找出来。数据库会以左边为基础,与右边表做笛卡尔乘积。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

代码语言:javascript
复制
select FirstName, LastName, City, State
from Person left join Address on Person.PersonId=Address.PersonId

LEFT JOIN或LEFT OUTER JOIN 左连接

左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

RIGHT JOIN 或 RIGHT OUTER JOIN 右链接

右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

FULL JOIN 或 FULL OUTER JOIN 全联接

完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Leetcode名企之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题解
    • LEFT JOIN或LEFT OUTER JOIN 左连接
    • RIGHT JOIN 或 RIGHT OUTER JOIN 右链接
    • FULL JOIN 或 FULL OUTER JOIN 全联接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档