MySQL中join关键字的使用

MySQL中关键字join的用法很多,很容易记错,这里专门写一篇博客用来记录join的用法。有兴趣的同学也可以参考MySQL官方手册

join是指连接的意思,常用于两个或两个以上的表进行联合查询,常用的组合有join(cross join,inner join),left join,right join。

现在数据库中有两张表如下:

test_join_1 test_join_1

test_join_2 test_join_2

JOIN/CROSS JOIN/INNER JOIN

SQL语句如下:

SELECT * FROM test_join_1 JOIN test_join_2;  
SELECT * FROM test_join_1 CROSS JOIN test_join_2;  
SELECT * FROM test_join_1 INNER JOIN test_join_2;  

结果如下图: join_result 从结果可以看出,普通的join/cross join/inner相当于将两张表做笛卡尔积操作所得出的结果。

JOIN/CROSS JOIN/INNER JOIN ON

SQL语句如下:

SELECT * FROM test_join_1 table1 JOIN test_join_2 table2 ON table1.id = table2.id;  
SELECT * FROM test_join_1 table1 CROSS JOIN test_join_2 table2 ON table1.id = table2.id;  
SELECT * FROM test_join_1 table1 INNER JOIN test_join_2 table2 ON table1.id = table2.id;  

结果如下图: join_on 从结果可以看出,join/cross join/inner join结合on关键字相当于两张表的交集。

LEFT JOIN ON

SQL语句如下:

SELECT * FROM test_join_1 table1 LEFT JOIN test_join_2 table2 ON table1.id = table2.id;  

结果如下图: test_joint_1 从结果可以看出,left join会从test_join_2中选出和test_join_1中id相等的字段,如果test_join_2中没有和test_join_1中匹配的字段,那么对应字段会被置为NULL。既然是left join,重要的就是test_join_1,所以结果中必然会包括test_join_1中所有的字段,这样想就不难理解了。

RIGHT JOIN ON

SQL语句如下:

SELECT * FROM test_join_1 table1 RIGHT JOIN test_join_2 table2 ON table1.id = table2.id;  

结果如下图: test_joint_1 从结果可以看出,类似left join,right join会保留test_join_2中的所有字段,如果test_join_1中没有匹配字段,相应字段会被置为NULL。

Shaohang Zhao

Read more posts by this author.