暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

多表联结

破晓的不止黎明 2020-07-08
257

今天遇到了sql题,多表联结问题

1: Person
+-------------+---------+
| 列名 | 类型 |
+-------------+---------+
| PersonId | int |
| FirstName | varchar |
| LastName | varchar |
+-------------+---------+
PersonId 是上表主键


2: Address
+-------------+---------+
| 列名 | 类型 |
+-------------+---------+
| AddressId | int |
| PersonId | int |
| City | varchar |
| State | varchar |
+-------------+---------+
AddressId 是上表主键 
编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,
都需要基于上述两表提供 person 的以下信息:FirstName, LastName, City, State

多表的联结又分为以下几种类型:


1)左联结(left join),联结结果保留左表的全部数据

2)右联结(right join),联结结果保留右表的全部数据

3)内联结(inner join),取两表的公共数据


网上找到了一张图,记住这个图多表联结问题基本就很明朗了.

但是他没给全,最后2个应该是

full outer join

full outer join
where 条件

那么上题的答案就呼之欲出:

我试了几个方法,思路基本就2种而且运行时间差不多


第一种,运行时长305ms


第二种,运行时长280ms


在join前先对Address表处理,去除Address里的重复项,然后让Person left join Address


这样做的好处是,在数据量特别大而且重复量也特别大时,可以节省join次数,从而节省效率,当然当数据量不那么大,重复数据不那么多时,反而会影响效率.

文章转载自破晓的不止黎明,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论