sql之left join、right join、inner join的区别以及适用场景

left join(左连接) 返回包括左表中的所有记录和右表中连接字段相等的记录 

Table A

id name

01 abc

02 ab

 

Table B

id   cnt

01   3

03   4

Select A.id,A.name,B.cnt from A left join B on A.id=B.id

结果

id name cnt

01 abc   3

02 ab    null

 

特别地,也有记录条数大于左边表的时候,例如:

Table A

id name

01 abc

02 ab

 

Table B

id   cnt

01   3

01   5

03   4

Select A.id,A.name,B.cnt from A left join B on A.id=B.id

结果

id name cnt

01 abc   3

01 abc   5

02 ab    null

结果是3条记录,比左连接左边的表table A的记录条数2还要多。

连接字段即两表的id字段

right join(右连接) 返回包括右表中的所有记录和左表中连接字段相等的记录

 

Table B

id   cnt

01   3

03   4


Table A

id name

01 abc

02 ab

 

Select A.id,A.name,B.cnt from B right join A on A.id=B.id

结果

id name cnt

01 abc   3

02 ab    null

左连接和右连接很相似,只是左右表位置的不同罢了。适用场景,如:员工表中有个字段是详细地址信息表的主键id,这两个表相关联时,就可以用左连接或右连接,因为在详细地址信息表中找不到某员工的地址信息也要将员工这条记录显示出来,相应的详细地址信息字段为空即可,而不能因为地址没有存在数据库里,这个员工就没了(简单理解成不重要的信息不影响整条记录的显示)

inner join(等值连接、内连接) 只返回两个表中连接字段相等的行

Table A

id name

01 abc

02 ab

 

Table B

id   cnt

01   3

03   4

Select A.id,A.name,B.cnt from A inner join B on A.id=B.id

结果

id name cnt

01 abc   3
内连接的适用场景:相连接的两个表中必须在某个字段上有相等的值才可以将整条记录显示出来,如一条服务单记录在了两个表中,A表中记录了该服务单的服务时间、坐席名称录音地址等基本信息,B表中记录了该服务单的业务详情,如保险单号,车牌号,保单日期等,当显示该服务单时,要将A表与B表做内连接,因为少这两表任何一个表,该服务单都不算完整,缺失的信息会使业务上没法继续。

总结:可以将可使用左连接和右连接的两个表理解成其中一个表的信息明显比另外一个表的信息重要得多;使用内连接的两个表理解成重要程度区别不太大的两个表。

注意:看“重要”与否的标准是针对查询结果的显示而言的。

  • 22
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值