SQL join 用于把来自两个或多个表的行结合起来。
下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。

接下来我们将会实现这7种链接
首先准备两个表: website(网站表) access_log(网站访问表)


LEFT JOIN:
LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配
包含所有a集合(普通情况):
select id,name from Websites a left join access_log b on a.id=b.aid

排除a集合中包含的b集合
select id,name from Websites a left join access_log b on a.id=b.aid where b.aid is null

INNER JOIN(表的并集):
INNER JOIN 关键字在表中存在至少一个匹配时返回行
select id,name FROM Websites a INNER JOIN access_log b on a.id=b.aid

RIGHT JOIN:
RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。
包含所有b集合(普通情况):
select id,name from Websites a right join access_log b on a.id=b.aid

排除b中包含有a的数据
select id,name from Websites a right join access_log b on a.id=b.aid where a is null

FULL OUTER JOIN :
FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.
FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。
使用的mysql不支持该语法,就不贴结果了.解决方案使用left join union right join
select id,name from Websites a FULL OUTER JOIN access_log b on a.id=b.aid
网友评论