在SQL中,我们经常需要将表与表之间连接起来,以达到我们查找的目的,这个时候我们有两种方法,一种是
SELECT *FROM table a,table b,table c WHERE a.id=b.id AND b.id = c.id
另一种就是使用JOIN函数,相比于单纯的多表查询运用JOIN用处更多,更加细致,使代码更可观更易理解。但是即使使用了JOIN函数,多表查询依旧可以说是SQL查询里面最绕的之一了。所以这里梳理一下JOIN 的用法和类别。
JOIN的用法
从https://www.runoob.com/sql/sql-join.html捞过来了一张图,很好用,很直率。
INNER JOIN
从图中我们可以看出,INNER JOIN查找的是表与表之间的交集,用法是
SELECT * FROM A INNER JOIN B ON A.KEY= B.KEY
OUTER JOIN
OUTER JOIN 的用处是即使有些不满足条件的,但是在特定表中依旧可以保留信息
LEFT OUTER JOIN
LEFT JOIN 一般被译作左连接,也写作 LEFT OUTER JOIN。左连接查询会返回左表(表 A)中所有记录,不管右表(表 B)中有没有关联的数据。在右表中找到的关联数据列也会被一起返回。
而图中第二个返回的左表(A)有但是右表(B)没有的所有记录
RIGHT OUTER JOIN
同上所述,只不过换了个方向
FULL OUTER JOIN
返回左右表的并集,也就是左右表都有的记录。
返回左右表交集的补集,这个MYSQL中写出来的通常是用UNION 结合
SELECT * FROM
A LEFT JOIN B ON A.KEY = B.KEY
WHERE B.KEY IS NOT FULL
UNION
SELECT * FROM
B LEFT JOIN A ON A.KEY = B.KEY
WHERE A,KEY IS NOT FULL
具体的还需要多练习一下体会一下,在实践中不可能只有两个表的。