SQL 左连接 vs 右连接
左连接和右连接的主要区别在于表的连接方式。
它们都是外连接的类型;也就是说,它们保留一张表中不匹配的行,并丢弃另一张表中不匹配的行。左连接保留左表中的不匹配行,而右连接保留右表中的不匹配行。
左连接的工作原理
左连接 或者 左外连接 在SQL中将两个或多个表合并在一起,第一个表原样返回,但是只有在后续表中有与第一个表对应的记录时才返回。
如果ON子句在后续表中找不到与第一个表的行匹配的记录,左连接仍然会将第一个表中的这些行返回到结果中,但是每列的值都为NULL。
语法
下面是SQL中左连接的基本语法:
SELECT table1.column1, table2.column2...
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
示例
下面的示例演示了对两个相关表进行左连接操作。这里,第一个表包含工资信息,而第二个表包含婚姻状况信息。由于Alex的状态未知,因此未在表中记录。
当使用左连接查询时,由于没有与Alex的状态匹配的记录,所以在最终的表中该值被记录为NULL。
右连接的工作原理
在SQL中,右连接或右外部连接查询返回右表中的所有行,即使在左表中没有匹配的记录。这意味着如果ON子句将左表中的0条记录与右表中的记录匹配,则右连接仍将返回结果中的右表行,但左表的每个列将具有NULL值。
语法
以下是SQL中右连接的基本语法-
SELECT table1.column1, table2.column2...
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
示例
现在在这个例子中,对相同的表进行了右连接操作。在这里,我们从右表开始连接;因为右表不含有与Alex的行匹配的记录值,所以该行被从最终表中丢弃。
最终表格仅包含两行数据,因为右表格仅包含两行。
左连接与右连接
让我们在下表中总结左连接和右连接之间的所有区别。
左连接 | 右连接 |
---|---|
左连接将第一个表或左表的数据与第二个表的数据进行匹配。如果数据匹配,则记录被合并;否则,记录为NULL。 | 右连接将第二个表或右表的数据与第一个表的数据进行匹配。如果数据匹配,则记录被合并;否则,记录为NULL。 |
如果第一个表的行数少于第二个表的行数,多出的未匹配行将被丢弃。 | 如果第二个表的行数少于第一个表的行数,多出的未匹配行将被丢弃。 |
这种连接也被称为左外连接。 | 这种连接也被称为右外连接。 |
在Transact SQL中,可以使用*=来替代LEFT JOIN或LEFT OUTER JOIN查询。 | 在Transact SQL中,可以使用=*来替代RIGHT JOIN或RIGHT OUTER JOIN查询。 |
从摘要中我们可以观察到,左连接和右连接之间并没有太大的区别。它们之间的每个区别都归结于表的连接方式和连接角度。