SQL联合查询inner join、outer join和cross join的区别详解

SQL联合查询inner join、outer join和cross join的区别详解

今天边肖就给大家详细讲解一下SQL联合查询中内连接、外连接、交叉连接的区别。边肖觉得内容挺好的,现在分享给大家,很有参考价值。有需要的朋友应该跟着边肖去看看。

对于数据库应用程序的开发来说,使用联合查询是不可避免的。SQL中常见的连接查询包括内连接、外连接和交叉连接;很多人,包括我自己,应该不是很清楚三者的区别。让我们来看看。如果使用join来连接表,缺点是内部连接。另外,开发中使用的左连接和右连接属于外连接,而外连接还包括全连接。下面,我就通过图案让你知道他们的不同。

有两张桌子,桌子A是左边的那张。b是右边的桌子。各有四条记录,其中两条同名:

1.1的结果。内连接是AB的交集。

SELECT * FROM table a table a内部联接TableB ON TableA . name=TableB . name

2.2号。LEFT [OUTER] JOIN产生表A的完整集合,而表B中匹配的有值,不匹配的用空值代替。

SELECT * FROM TableA左外部联接TableB ON TableA . name=TableB . name

3.RIGHT [OUTER] JOIN产生表B的完整集合,而表A中匹配的有值,不匹配的用空值代替。

SELECT * FROM table a table a RIGHT OUTER JOIN table b ON TableA . name=TableB . name

如左连接所示。

4.FULL [OUTER] JOIN生成A和b的并集,如果没有匹配的记录,将使用null作为值。

SELECT * FROM TableA FULL上的完全外部联接TableB . name=TableB . name

通过is NULL可以找出不匹配的值:

SELECT * FROM TableA FULL上的完全外部联接TableB . name=TableB . name

其中TableA.id为null或TableB.id为null

5.交叉联接对表A和表B中的数据执行N*M组合,即笛卡尔乘积。如果这个会议会产生4*4=16条记录,我们在开发过程中必须对数据进行筛选,所以这种很少使用。

SELECT * FROM表a交叉联接表b

通过上面的对比,相信你一眼就能看出内连接、外连接和交叉连接的区别。

补充

为什么用join最好?因为用“,”作为表连接,所以A表和B表直接生成笛卡尔积,然后用where过滤结果。但是,在联接时,表A和表B被联接,它们将根据on之后的条件进行筛选,然后根据where条件对结果进行筛选。

根据sql标准,交叉连接是笛卡尔积。但是对于mysql来说,交叉连接相当于内部连接。

总结

这就是本文的全部内容。希望这篇文章的内容对你的学习或工作有一定的参考价值。谢谢你的支持。如果你想了解更多,请查看下面的相关链接。

SQL联合查询inner join、outer join和cross join的区别详解