一. 组合两张表
有两张表:
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
):取两表的公共数据。