sql的join和where区分【MySQL教程】,mysql
join关键字的作用是将多个表按肯定的前提联合起来,从而能够实现从多个表中猎取数据。
引荐课程:MySQL教程。
在join背面能够接on前提和where前提,在这里我重要就是说这两者之间的差别
竖立两张简朴的用来测试的表并增加数据,以下所示,一张表名为id_name,另一张表名为id_age
起首看看不增加前提——t2.age ='22'时的效果
SELECT * from id_name t1 LEFT JOIN id_age t2 on t1.id = t2.id
获得
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'
获得效果以下
能够获得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'
获得效果以下
可获得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, 中心没有别的步骤.
以上就是sql的join和where区分的细致内容,更多请关注ki4网别的相干文章!