mysql join和where_sql的join和where区别

join关键字的作用是将多个表按一定的条件联合起来,从而可以实现从多个表中获取数据。

4cbfddb168332eb998838f66dbc5852e.png

在join后面可以接on条件和where条件,在这里我主要就是说这两者之间的差别

建立两张简单的用来测试的表并添加数据,如下所示,一张表名为id_name,另一张表名为id_age

0b61c7e4e0f395689259082949f1c29a.png

e974538fd7e7dde27147d2b24373eddf.png

首先看看不添加条件——t2.age ='22'时的结果SELECT * from id_name t1 LEFT JOIN id_age t2 on t1.id = t2.id

得到

3dbcd07f7eb10823bd40eebdbe516b06.png

1、在这里以left join为例,首先运行where加条件——t2.age ='22'时SELECT * from id_name t1 LEFT JOIN id_age t2 on t1.id = t2.id where t2.age ='22'

得到结果如下

c1d90f8719fdf584d7b4af2a0755f02c.png

可以得到where条件是在left join操作完成后所进行的条件筛选

2、当运行on加条件——t2.age ='22'时SELECT * from id_name t1 LEFT JOIN id_age t2 on t1.id = t2.id and t2.age ='22'

得到结果如下

216d93e3410dd8f1d60545e7ddb28beb.png

可得到on条件是在left join之前先进行条件筛选,而后才对两个表格join操作

在这里是以left join为例,对于inner join来说由于其性质,这两种条件得到的结果会是一样,但中间内部过程还是有差异的

on比where起作用更早,,先根据on条件进行多表的连接操作,生成一个临时表再通过where来筛选

那 on 和where 那个更高效呢

如果是inner join, 放on和放where产生的结果一样, 但没说哪个效率速度更高? 如果有outer join (left or right), 就有区别了, 因为on生效在先, 已经提前过滤了一部分数据, 而where生效在后.

综合一下, 感觉还是放在on里更有效率, 因为它先于where执行.

先笛卡尔积, 然后再on过滤, 如果join是inner的, 就继续往下走, 如果join 是left join, 就把on过滤掉的左主表中的数据再添加回来; 然后再执行where里的过滤;

on中不是最终过滤, 因为后面left join还可能添加回来, 而where才是最终过滤.

只有当使用外连接(left, right)时, on 和 where 才有这个区别, 如果用inner join, 在哪里制定都一样, 因为on 之后就是where, 中间没有其它步骤.

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值