想要精通算法和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):取两表的公共数据。
经验分享 程序员 微信小程序 职场和发展