知识点 左连接、右连接、内连接

为什么使用 这些X连接?

答:因为 我们想看到更多维度的数据,原本这些数据其实应该在一个表的,但为了避免数据冗余、面向对象(一张表一般对应一个实体类)等因素,我们把这些数据根据某个规则进行拆分了多张表。

外连接有:左连接、右连接、全连接(可以省略 outer关键字),即 外连接:不是一个具体的连接

内连接 就是内连接:可以省略 inner关键字

1、左连接:left  (outer) join

左表的所有行会显示,右表的 只有和左表匹配到的行才会显示。即: A表的全集+ AB表的交集

select * from A left Join B  on A.key=B.key

2、右连接:right (outer) join

右表的所有行会显示,左表的 只有和右表匹配到的行才会显示。 即:B表的全集+AB表的交集

select * from A  right join B on A.key=B.key

3、内连接:( inner)  join

两种表的公共部分进行显示,即: AB表的交集。注: inner 关键字可以省略

select * from A inner join B on A.key=B.key

或

select * from A join B on A.key=B.key

当B表的外键key  refer a表的key时,且join表示,用此key关联的时候,那么 inner join 和right join 的结果是一样的!因为B表有的,A表也都有。

5、全连接:full outer join

注:MySQL本身不支持你所说的full join(全连接),但可以通过union来实现 ,

A+B

select * from A full outer join B on A.key=B.key

A+B-(AB交集)

select * from A full outer join B on A.key=B.key 
where ( A.key is null or B.key is null )

A的独有:

select * from A left join B on A.key=B.key where B.key  is null

注:切记不可写成 select * from A left join B on A.key=B.key  where B.key  = null

因为 null 是一种特有的数据类型,其等价于没有任何值、是未知数。NULL与0、空字符串、空格都不同

 B的独有:

select * from A right join B on A.key=B.key  where A.key  is null

 

扩展:

左右链接:使用久了会以为 : 

假如A表有10条数据,B表有5条数据

A left join B 一定是 10条吗? 不一定  结果肯定》=10 因为 链接的属性 在A表中的同一个值在B表中可能对应两条值,所以可能是11条数据:

例如:student表有2条数据,class表有2条数据,当 student left join class  ,结果出现了3条数据

执行:

select * from student s left join class c on  s.student_id=c.student_id

结果:

全连接:

就是笛卡尔乘积,两个表的每行匹配

  • 24
    点赞
  • 144
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值