Mysql 外连接和内连接分析
表1:test_user
表2:
一:LEFT JOIN
1、SELECT * from test_user a LEFT JOIN test_order b ON a.name
=b.name
2、SELECT * from test_user a LEFT JOIN test_order b ON a.name
=b.name
where a.name
='张三'
3、SELECT * from test_user a LEFT JOIN test_order b ON a.name
=b.name
and a.name
='张三'
4、SELECT * from test_user a LEFT JOIN test_order b ON a.name
=b.name
where b.book
='热血传奇'
5、SELECT * from test_user a LEFT JOIN test_order b ON a.name
=b.name
and b.book
='热血传奇'
结论:以上的结果可以得出,条件写在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
='热血传奇'
2、SELECT * from test_user a INNER JOIN test_order b ON a.name
=b.name
and b.book
='热血传奇'
3、等价于:SELECT * from test_user a , test_order b where a.name
=b.name
and b.book
='热血传奇'
结论:从上面测试可以看出在内连接中条件写在where 和 on 中 结果没有差别,但是效率在理论上写在on 中要比写在where 中效率高,因为写在on中是先筛选再连接,效率上比先连接再筛选要高。
效率:
1、inner join比left join快
2、inner join 条件写在on中比写在where中快