LeetCode 175. Combine Two Tables 组合两个表(数据库表连接)

题目:

在这里插入图片描述
Write a SQL query for a report that provides the following information for each person in the Person table, regardless if there is an address for each of those people:

FirstName, LastName, City, State

解答:

SELECT FirstName,LastName,City,State FROM Person 
left join Address 
on Person.PersonId=Address.PersonId;

解析:

本题主要考察的的数据库中对 left join的用法 :
left join的实现效果就是保留左表的全部信息,将右表往左表上拼接,即使在右表中没有匹配的行,如果匹配不上则为NULL

join的底层操作过程,其实就是从驱动表里面依次取出每一个值,然后去非驱动表里面进行匹配。其中,驱动表就是主表,如left join中的左表就是驱动表,right join中的右表是驱动表。被驱动表也叫做匹配表。

除了left join以外,还有right joininner joinouter join等。

其中,Inner Join返回满足第一个(顶端)输入与第二个(底端)输入联接的每一行。这个和用select查询多表是一样的效果,所以很少用到

outer join则会返回每个满足第一个(顶端)输入与第二个(底端)输入的联接的行。它还返回任何在第二个输入中没有匹配行的第一个输入中的行。所以通常意义上的left join就是left outer joinright join就是right outer join

举例看一下两者的具体区别:

Table A:

aidadate
1a1
2a2
3a3

TableB

bidbdate
1b1
2b2
4b4

两个表A,B相连接,要取出id相同的字段
select * from a inner join b on a.aid = b.bid
这是仅取出匹配的数据
此时的取出的是:

1a1b1
2a2b2

select * from a left join b on a.aid = b.bid
首先取出a表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:

1a1b1
2a2b2
3a3空字符

select * from b right join a on b.bid = a.aid
指的是首先取出b表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:

1a1b1
2a2b2
4空字符b4
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值