📜  SQL |联接(内联接、左联接、右联接和完全联接)(1)

📅  最后修改于: 2023-12-03 15:05:18.257000             🧑  作者: Mango

SQL联接(内联接、左联接、右联接和完全联接)

在SQL中,联接(join)用于将两个或多个表连接在一起并生成一个新的结果集。联接是SQL查询的重要部分,因为它们允许我们从符合特定条件的多个表中取得数据。

内联接(Inner Join)

内联接是最基本的联接类型,它只返回满足条件的行。在内联接中,两个表中至少有一个公共列,并且这些列的值必须匹配。内联接使用JOIN关键字来连接两个或多个表,而且也可以使用INNER JOIN来进行连接。以下是内联接的语法:

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;

以下是内联接的示例:

SELECT customers.customer_id, orders.order_id
FROM customers
INNER JOIN orders
ON customers.customer_id = orders.customer_id;

在上面的示例中,我们使用INNER JOIN来连接customers表和orders表,并根据它们的customer_id列进行匹配。结果集将只包含具有匹配值的行。

左联接(Left Join)

左联接会返回左表中所有的行,即使右表没有匹配的行。左联接使用LEFT JOIN关键字来连接左表和右表,并通过左表中的列来匹配右表中的行。以下是左联接的语法:

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;

以下是左联接的示例:

SELECT customers.customer_id, orders.order_id
FROM customers
LEFT JOIN orders
ON customers.customer_id = orders.customer_id;

在上面的示例中,我们使用LEFT JOIN来连接customers表和orders表,并根据它们的customer_id列进行匹配。结果集将包含左表中的所有行,即使右表中没有与之匹配的行也是如此。

右联接(Right Join)

右联接会返回右表中所有的行,即使左表没有匹配的行。右联接使用RIGHT JOIN关键字来连接左表和右表,并通过右表中的列来匹配左表中的行。以下是右联接的语法:

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;

以下是右联接的示例:

SELECT customers.customer_id, orders.order_id
FROM customers
RIGHT JOIN orders
ON customers.customer_id = orders.customer_id;

在上面的示例中,我们使用RIGHT JOIN来连接customers表和orders表,并根据它们的customer_id列进行匹配。结果集将包含右表中的所有行,即使左表中没有与之匹配的行也是如此。

完全联接(Full Join)

完全联接(也称为外联接或全外联接)将返回左表和右表中所有的行,不管它们是否有匹配的行。完全联接使用FULL JOINFULL OUTER JOIN关键字来连接左表和右表。以下是完全联接的语法:

SELECT column_name(s)
FROM table1
FULL JOIN table2
ON table1.column_name = table2.column_name;

以下是完全联接的示例:

SELECT customers.customer_id, orders.order_id
FROM customers
FULL JOIN orders
ON customers.customer_id = orders.customer_id;

在上面的示例中,我们使用FULL JOIN来连接customers表和orders表,并根据它们的customer_id列进行匹配。结果集将包含左表和右表中的所有行,不管它们是否有匹配的行。

总结

联接是SQL中非常重要的概念,通过不同类型的联接,我们能够从多个表中检索数据。内联接只返回符合条件的行,左联接返回左表中的所有行,即使右表没有匹配的行,右联接返回右表中的所有行,即使左表没有匹配的行,完全联接返回左表和右表中的所有行,不管它们是否有匹配的行。在实践中,我们需要选择适当的联接类型来获取所需的结果集。