表1:test_user

clipboard.png

表2:

clipboard.png

一:LEFT JOIN
1、SELECT * from test_user a LEFT JOIN test_order b ON a.name=b.name

clipboard.png

2、SELECT * from test_user a LEFT JOIN test_order b ON a.name=b.name where a.name='张三'

clipboard.png

3、SELECT * from test_user a LEFT JOIN test_order b ON a.name=b.name and a.name='张三'

clipboard.png

4、SELECT * from test_user a LEFT JOIN test_order b ON a.name=b.name where b.book='热血传奇'

clipboard.png

5、SELECT * from test_user a LEFT JOIN test_order b ON a.name=b.name and b.book='热血传奇'

clipboard.png

结论:以上的结果可以得出,条件写在where 和 on 中的区别在于,左连接查询的特性,不管右边是否存在匹配数据,左边的数据全部查出来。

二:RIGHT JOIN

结论:和LEFT JOIN差不多,右连接是不管左边是否存在匹配数据,右边的数据全部查出来。

三、INNER JOIN

1、SELECT * from test_user a INNER JOIN test_order b ON a.name=b.name WHERE b.book='热血传奇'

clipboard.png

2、SELECT * from test_user a INNER JOIN test_order b ON a.name=b.name and b.book='热血传奇'

clipboard.png

3、等价于:SELECT * from test_user a , test_order b where a.name=b.name and b.book='热血传奇'

clipboard.png

结论:从上面测试可以看出在内连接中条件写在where 和 on 中 结果没有差别,但是效率在理论上写在on 中要比写在where 中效率高,因为写在on中是先筛选再连接,效率上比先连接再筛选要高。

效率:
1、inner join比left join快
2、inner join 条件写在on中比写在where中快


chonglou
1 声望1 粉丝

菜鸟一枚