我们首先来看我们的两个表:

table1:

sql LEFT JOIN RIGHT JOIN(左连接)(mysql)_LEFT-JOIN

table2:

sql LEFT JOIN RIGHT JOIN(左连接)(mysql)_RIGHT-JOIN_02

在这里,LEFT JOIN(内连接,或等值连接):取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录。

例如,如果table2中的age1的值有一个值是11,table1的值中age1的值也有11,那么就查询出来;但是table2中如果有值2134,table1中的age1并不存在2134,那么这个值就不会查询出来:

再假设,如果table1中有age1的值2,3,4但是table2中没有一个age1的值是2,3,4那么table1中就会显示出来2,3,4;换句话说,使用left join,最开始的表,左表会全部显示出来,右表则会显示左表中有的值。

SELECT * FROM table1 LEFT JOIN table2 ON table1.age1 = table2.age1;在这里使用

结果如下:

sql LEFT JOIN RIGHT JOIN(左连接)(mysql)_LEFT-JOIN_03

那么RIGHT JOIN 正好相反:与 LEFT JOIN 相反,取得右表(table2)完全记录,即是左表(table1)并无匹配对应记录。

SELECT * FROM table1 RIGHT JOIN table2 ON table1.age1 = table2.age1;

sql LEFT JOIN RIGHT JOIN(左连接)(mysql)_内连接_04

1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。