想要精通算法和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):取两表的公共数据。