今天遇到了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 joinwhere 条件
那么上题的答案就呼之欲出:
我试了几个方法,思路基本就2种而且运行时间差不多
第一种,运行时长305ms

第二种,运行时长280ms
在join前先对Address表处理,去除Address里的重复项,然后让Person left join Address

这样做的好处是,在数据量特别大而且重复量也特别大时,可以节省join次数,从而节省效率,当然当数据量不那么大,重复数据不那么多时,反而会影响效率.
文章转载自破晓的不止黎明,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




