前言:
INNER JOIN 和 OUTER JOIN 是SQL中常用的两种连接方式,用于从两表活多表中提取相关的数据。两者区别主要在于返回的 结果集 如何处理 匹配 与 不匹配 的行。
目录
1、INNER JOIN
2、OUTER JOIN
3、总结
1、INNER JOIN
称为内连接,只有查询的几张表中的列值相等时,才会返回这些行数据。如果某行其中一个表没有对应的匹配,那么则不会返回改行数据。
举个例子:有两张表,分别是a、b表。
a表数据 b表数据
SQL语句:
SELECT a.`name`, b.age
FROM a
INNER JOIN b ON a.id = b.id;
执行结果:
在这个例子中,id=3 的sr没有匹配的age,因此不会出现在结果中。
2、OUTER JOIN
outer join可以细分为三种:left join、right join、full join
①left join:返回左表(这是我们的第一个表)的所有行,即使右表(第二个表)中没有匹配的行,依旧以显示所查询到的字段,只不过输出的结果为null。如下:
SQL语句:
SELECT a.name, b.age FROM a LEFT JOIN b ON a.id= b.id;
执行结果:
②right join:返回右表(第二个表)的所有行,即使左表(第一个表)中没有匹配的行,依旧可以显示所查询到的字段,输出也是为null。如下:
SQL语句:
SELECT a.name, b.age FROM a RIGHT JOIN b ON a.id = b.id;
执行结果:
③full join:返回两个表(或多个表)中的所有行,包括没有匹配上的行,在另一张表显示为null。如下:
SQL语句:因为MySQL不支持 full join,我们可以结合left join 与 right join 来模拟 full join(像PostgreSQL、SQL Server、Oracle、IBM Db2 都支持 full join)
SELECT * FROM a LEFT JOIN b ON a.id = b.id UNION ALL SELECT * FROM a RIGHT JOIN b ON a.id = b.id WHERE a.id IS NULL;
执行结果:
3、总结
1、inner join:仅返回两表(多表)匹配的行。
2、left join:返回左表所有行与右表匹配行,右表未匹配上显示null。
3、right join:返回右表所有行与左表匹配行,左表未匹配上显示null。
4、null join:返回两表(多表)所有行,无论是否有匹配的行,未匹配的都像是为null。