sql左连接和右连接区别是什么?

1. SQL 左连接

SQL 左连接(LEFT JOIN)是一种联结类型,它会返回被连接表中所有行和匹配连接表中的行。所以,即使没有匹配的行,左表中所有的行也会被返回。左连接是指以左边的表为主,以右边的表为辅,保留左表中的全部字段及右表中在左表中有对应键值的记录。

1.1 SQL 左连接语法

SELECT column_name(s)

FROM table_name1

LEFT JOIN table_name2

ON table_name1.column_name = table_name2.column_name;

在使用 SQL 左连接时,需要在主表(左表)之后添加 LEFT JOIN 关键字,然后指定连接表 (右表)。 连接条件是使用 ON 关键字指定的。

1.2 SQL 左连接示例

下面是一张名为“employees”的员工表和一张名为“orders”的订单表,通过 SQL 左连接查询他们的数据:

employees表:

+----+-------+--------+

| id | name | salary |

+----+-------+--------+

| 1 | Jack | 5000 |

| 2 | Rose | 6000 |

| 3 | Lucy | 5500 |

| 4 | Kevin | 7000 |

+----+-------+--------+

orders表:

+-----+------------+-------+

| oid | order_date | price |

+-----+------------+-------+

| 1 | 2019-01-01 | 800 |

| 2 | 2019-02-01 | 1200 |

| 3 | 2019-03-01 | 500 |

+-----+------------+-------+

查询语句如下:

SELECT *

FROM employees

LEFT JOIN orders

ON employees.id = orders.oid;

查询结果如下:

+----+-------+--------+------+------------+-------+

| id | name | salary | oid | order_date | price |

+----+-------+--------+------+------------+-------+

| 1 | Jack | 5000 | NULL | NULL | NULL |

| 2 | Rose | 6000 | 1 | 2019-01-01 | 800 |

| 3 | Lucy | 5500 | 2 | 2019-02-01 | 1200 |

| 4 | Kevin | 7000 | 3 | 2019-03-01 | 500 |

+----+-------+--------+------+------------+-------+

左连接保留左表中所有字段,而右表中有对应键值的记录连接上了,否则为空。例如,Jack 没有对应的订单记录,因此 oid、order_date 和 price 字段为空。

2. SQL 右连接

SQL 右连接(RIGHT JOIN)是一种联结类型,它会返回右表中的所有行和匹配连接表中的行。所以,即使没有匹配的行,右表中所有的行也会被返回。右连接是指以右边的表为主,以左边的表为辅,保留右表中的全部字段及左表中在右表中有对应键值的记录。

2.1 SQL 右连接语法

SELECT column_name(s)

FROM table_name1

RIGHT JOIN table_name2

ON table_name1.column_name = table_name2.column_name;

在使用 SQL 右连接时,需要在主表(右表)之后添加 RIGHT JOIN 关键字,然后指定连接表 (左表)。 连接条件是使用 ON 关键字指定的。

2.2 SQL 右连接示例

下面是一张名为“employees”的员工表和一张名为“orders”的订单表,通过 SQL 右连接查询他们的数据:

employees表:

+----+-------+--------+

| id | name | salary |

+----+-------+--------+

| 1 | Jack | 5000 |

| 2 | Rose | 6000 |

| 3 | Lucy | 5500 |

| 4 | Kevin | 7000 |

+----+-------+--------+

orders表:

+-----+------------+-------+

| oid | order_date | price |

+-----+------------+-------+

| 1 | 2019-01-01 | 800 |

| 2 | 2019-02-01 | 1200 |

| 3 | 2019-03-01 | 500 |

| 4 | 2019-04-01 | 1500 |

+-----+------------+-------+

查询语句如下:

SELECT *

FROM employees

RIGHT JOIN orders

ON employees.id = orders.oid;

查询结果如下:

+------+-------+--------+-----+------------+-------+

| id | name | salary | oid | order_date | price |

+------+-------+--------+-----+------------+-------+

| 2 | Rose | 6000 | 1 | 2019-01-01 | 800 |

| 3 | Lucy | 5500 | 2 | 2019-02-01 | 1200 |

| 4 | Kevin | 7000 | 3 | 2019-03-01 | 500 |

| NULL | NULL | NULL | 4 | 2019-04-01 | 1500 |

+------+-------+--------+-----+------------+-------+

右连接保留右表中所有字段,而左表中有对应键值的记录连接上了,否则为空。例如,订单表中的第四条记录没有对应的员工记录,因此 id、name 和 salary 字段为空。

3. SQL 左连接与右连接的区别

SQL 左连接与右连接最主要的区别在于它们返回结果集的规则。左连接返回左表中的所有记录以及与之匹配的右表记录。如果没有匹配,右表中的字段会显示为 NULL。而右连接返回右表中的所有记录以及与之匹配的左表记录。如果没有匹配,左表中的字段会显示为 NULL。

总结:

左连接是以左表为主,以右表为辅。它返回左表中的所有行和右表中匹配的行。

右连接是以右表为主,以左表为辅。它返回右表中的所有行和左表中匹配的行。

因此,需要根据业务需求来选择使用左连接还是右连接。

参考链接:

https://www.runoob.com/sql/sql-join-left.html

https://www.runoob.com/sql/sql-join-right.html

数据库标签