一,内连接(Inner Join)
- 返回两个表中有匹配的记录。
- 如果表中有至少一个匹配,它就会返回行。
二,左连接(Left Join)
返回左表中的所有记录,以及右表中匹配的记录。如果右表没有匹配,则结果中右表的部分会包含NULL。
驱动表是左表,即LEFT JOIN关键字左边的表。根据“小表驱动大表”法则,使用左连接时,应该让左表为小表,右表为大表
三,右连接(Right Join)
与左连接相反,它返回右表中的所有记录,以及左表中匹配的记录。如果左表没有匹配,结果中左表的部分会包含NULL。
驱动表是右表,即RIGHT JOIN关键字右边的表。根据“小表驱动大表”法则,使用右连接时,应该让右表为小表,左表为大表
四,全连接(Full Join)
返回左表和右表中的所有记录。如果某一侧没有匹配,那么另一侧的结果将会包含NULL。
五,交叉连接(Cross Join)
- 返回两个表中所有可能的行组合,这通常被称为笛卡尔积。
- 如果两个表分别有x和y行,交叉连接的结果将有x*y行。
笛卡尔积是没有任何连接条件时的交叉连接,其结果是第一个表中的每一行与第二个表中的每一行组合。这通常不是一个有用的操作,因为它生成大量的组合,而这些组合中的大多数通常都是无意义的。
六,连接和笛卡尔积的区别
连接和笛卡尔积之间的区别:
- 连接是有目的的,通常基于相关的键(如主键和外键)来匹配行。
- 笛卡尔积没有连接条件,因此会产生大量不必要的数据,这通常不是我们想要的结果。
在实际应用中,通常会避免笛卡尔积,因为它会造成性能问题,并返回大量无用的数据。相反,连接用于精确提取我们需要的数据,通常是通过在两个表之间定义明确的关系来实现的。