sql语句中join ,left join ,right join有什么区别

sql语句中join ,left join ,right join有什么区别
最新回答
幽萌之羽

2024-04-15 00:12:11

在SQL中,JOIN用于从两个或多个表中获取相关数据。主要有几种类型:LEFT JOIN、RIGHT JOIN、INNER JOIN、FULL JOIN和CROSS JOIN。

LEFT JOIN(左连接)返回左表中的所有记录,即使在右表中没有匹配的记录。如果有匹配的记录,它也会返回。例如,执行以下查询:

SELECT * FROM @a Aa LEFT JOIN @b Bb ON Aa.a = Bb.a

这将返回@a表中的所有行,即使@b表中没有与之匹配的行。如果存在匹配项,也会返回匹配项。

RIGHT JOIN(右连接)与LEFT JOIN相反,它返回右表中的所有记录,即使在左表中没有匹配的记录。如果有匹配的记录,它也会返回。

INNER JOIN(内连接)返回两个表中连接字段相等的行。只有当两个表中的连接字段匹配时,才会返回数据。

FULL JOIN(外连接)返回两个表中的所有行,包括没有匹配的行。它类似于LEFT JOIN和RIGHT JOIN的组合。

CROSS JOIN(交叉连接)返回两个表中所有可能的组合。结果集的大小等于第一个表的行数乘以第二个表的行数。

为了更好地理解这些JOIN操作,我们可以创建两个简单的表@A和@B,然后进行各种JOIN操作。例如:

创建表@A和@B:

DECLARE @a TABLE(a INT, b INT)

DECLARE @b TABLE(a INT, b INT)

插入数据:

INSERT INTO @a VALUES(1, 1), (2, 2)

INSERT INTO @b VALUES(1, 1), (3, 3)

执行LEFT JOIN:

SELECT * FROM @a Aa LEFT JOIN @b Bb ON Aa.a = Bb.a

执行RIGHT JOIN:

SELECT * FROM @a Aa RIGHT JOIN @b Bb ON Aa.a = Bb.a

执行INNER JOIN:

SELECT * FROM @a Aa INNER JOIN @b Bb ON Aa.a = Bb.a

执行FULL JOIN:

SELECT * FROM @a Aa FULL JOIN @b Bb ON Aa.a = Bb.a

执行CROSS JOIN:

SELECT * FROM @a CROSS JOIN @b

通过这些示例,你可以看到各种JOIN操作如何工作,以及它们如何影响查询结果。