想要精通算法和SQL的成长之路 - 组合两张表(SQL)

想要精通算法和SQL的成长之路 - 组合两张表(SQL)

一. 组合两张表

原题连接

有两张表:
1.Person表:
在这里插入图片描述
2.Address表:
在这里插入图片描述
编写一个SQL查询来报告 Person 表中每个人的姓、名、城市和州。如果 personId 的地址不在 Address 表中,则报告为空 null 。输出如下:
在这里插入图片描述

编写SQL如下(答案):

SELECT
	p.FirstName,
	p.LastName,
	a.City,
	a.State 
FROM
	Person AS p
	LEFT JOIN Address AS a ON ( p.PersonId = a.PersonId )

结果如下:
在这里插入图片描述

为什么要用left join?我们从案例输出结果发现,输出结果当中,Person表中的相关列都是需要保留的,而Address中的数据如果没有,就用null来代替。考虑到有的人可能没有地址信息,因此得用左联结。

举个例子,你用 select + where 的语句去查询:

SELECT
	p.FirstName,
	p.LastName,
	a.City,
	a.State 
FROM
	Person AS p, Address AS a where p.PersonId = a.PersonId 

结果如下:
在这里插入图片描述

可见,这种写法只能将同时存在与两张表中的PersonId相关数据查询出来。不符合题目的要求。因此本题目需要使用左联结。

二. 相关知识点

  • 左联结(left join):联结结果保留左表的全部数据。

  • 右联结(right join):联结结果保留右表的全部数据。

  • 内联结(inner join):取两表的公共数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zong_0915

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值