left join多表联查

查询复杂度

A表中n条数据,B表中m条数据
表的连接查询 select * from A left B on,复杂度为n+m
表的子查询 select * from A in (select * from B),复杂度为n*m

where和left join的区别

数据库在通过连接两张或多张表返回记录时,都会生成一张中间临时表,然后再返回这张临时表给用户

区别

  • on条件是在生成临时表时的条件,无论on的条件是否为真,都会返回左表中的记录
  • where条件是在生成临时表后,再对临时表进行过滤的条件

说明

有一种情况:比如A表查询的数量是1条,B表查询的数量是10条,on的条件是A表中的一条数据对应B表中的10条数据,当使用left join查询时,会出现10条数据。
举例如下

select * from A where id = 123;

假如这条查询语句查到的数据为1条

idnameage
123张三18
select * from B where a_id = 123;

假如这条查询语句查到的数据为10条

ida_idscore
112398
2123100
312398
412395
512383
612390
7123100
812389
912396
1012392

当使用如下查询语句时:

select * from A left join B on A.id = B.a_id where a_id = 123;

这时的查询语句为10条,如下

idnameageida_idscore
123张三18112398
123张三182123100
123张三18312398
123张三18412395
123张三18512383
123张三18612390
123张三187123100
123张三18812389
123张三18912396
123张三181012392

left join, right join, inner join

left join:左连接,把左边表中的数据全部查出来,右边表中的数据有则匹配,没有则为null。
right join:右连接,返回包括右表中的所有记录,和左表中的字段匹配,原理同left join类似。
inner join:等值连接,只返回两个表中连接字段想等的表。

可以查看相关链接,写的很清楚
https://blog.csdn.net/weixin_48052161/article/details/116072167

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值