Mysql关于join on where(and)的区别

来源:互联网 发布:网络安全工程师 编辑:程序博客网 时间:2024/06/04 17:44

直接看实例;

test表


test2表


JOIN

SELECT * FROM test JOIN test2 ON test.`book_id` =test2.`book_id` WHERE test.book_name='java'  

SELECT * FROM test JOIN test2 ON test.`book_id` =test2.`book_id` AND test.book_name='java'

的结果是一样的。


LEFT JOIN

SELECT * FROM test LEFT JOIN test2 ON test.`book_id` =test2.`book_id` WHERE test.book_name='java'  


SELECT * FROM test LEFT JOIN test2 ON test.`book_id` =test2.`book_id` AND test.book_name='java'


RIGHT JOIN

SELECT * FROM thai_test RIGHT JOIN thai_test2 ON thai_test.`book_id` =thai_test2.`book_id` WHERE thai_test.book_name='java'  

SELECT * FROM thai_test RIGHT JOIN thai_test2 ON thai_test.`book_id` =thai_test2.`book_id` AND thai_test.book_name='java'  


________________________________________________________________________
ps.以下为转载
________________________________________________________________________

1,where 是在两个表join完成后,再附上where条件。
2,而 and 则是在表连接前过滤A表或B表里面哪些记录符合连接条件,同时会兼顾是left join还是right join。即假如是左连接的话,如果左边表的某条记录不符合连接条件,那么它不进行连接,但是仍然留在结果集中(此时右边部分的连接结果为NULL)。
3,建议尽量用where来过滤条件,以避免复杂的逻辑考虑。(除非在某些情况下(后接其他sql语句),用and会报错,才用and,但要考虑是否影响正确结果。)

0 0
原创粉丝点击