📜  内连接与外连接(1)

📅  最后修改于: 2023-12-03 14:50:09.078000             🧑  作者: Mango

内连接与外连接

内连接和外连接是在关系型数据库中用于连接两个或多个表格的方法。下面将分别介绍它们的概念、用法及代码示例。

内连接

内连接(Inner Join)指的是将两个表格中相匹配的记录连接在一起。只有在两个表格中都存在的记录才会被保留,其余记录将被丢弃。

内连接的语法如下:

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

其中,table1table2 是要连接的两个表格,column_name 是要匹配的列名,可以在两个表格中的任意列上进行匹配。

接下来,我们用一个简单的例子来说明内连接的用法。请考虑以下两个表格:

订单表格 orders

| OrderID | Customer | OrderDate | | ------- | -------- | --------- | | 001 | John | 2021-01-01| | 002 | Tom | 2021-02-01| | 003 | Alice | 2021-03-01|

订单详情表格 order_details

| OrderID | Product | Quantity | | ------- | -------- | -------- | | 001 | Apple | 5 | | 001 | Banana | 10 | | 002 | Orange | 20 | | 003 | Pineapple| 2 |

要查询某个订单的所有产品及数量,可以使用内连接:

SELECT orders.OrderID, order_details.Product, order_details.Quantity
FROM orders
INNER JOIN order_details ON orders.OrderID = order_details.OrderID;

该语句将 orders 与 order_details 表格连接在一起,只返回两个表格中订单号匹配的记录:

| OrderID | Product | Quantity | | ------- | -------- | -------- | | 001 | Apple | 5 | | 001 | Banana | 10 | | 002 | Orange | 20 | | 003 | Pineapple| 2 |

外连接

外连接(Outer Join)指的是将两个表格全部或部分地连接在一起。不同于内连接,外连接不要求两个表格中都存在匹配的记录。当其中一个表格中没有与另一个表格匹配的记录时,外连接也会返回结果。

外连接分为左外连接、右外连接和全外连接,它们的语法分别如下:

  • 左外连接(Left Join):
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
  • 右外连接(Right Join):
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
  • 全外连接(Full Join):
SELECT column_name(s)
FROM table1
FULL JOIN table2
ON table1.column_name = table2.column_name;

下面将以左外连接为例来说明外连接的用法。请再次考虑以下两个表格:

订单表格 orders

| OrderID | Customer | OrderDate | | ------- | -------- | --------- | | 001 | John | 2021-01-01| | 002 | Tom | 2021-02-01| | 004 | Bob | 2021-04-01|

订单详情表格 order_details

| OrderID | Product | Quantity | | ------- | -------- | -------- | | 001 | Apple | 5 | | 001 | Banana | 10 | | 002 | Orange | 20 | | 003 | Pineapple| 2 |

要查询所有订单及其对应的产品及数量,可以使用左外连接:

SELECT orders.OrderID, order_details.Product, order_details.Quantity
FROM orders
LEFT JOIN order_details ON orders.OrderID = order_details.OrderID;

该语句将 orders 与 order_details 表格左外连接在一起,意味着 orders 表格中没有与 order_details 表格中匹配的记录也将被返回:

| OrderID | Product | Quantity | | ------- | -------- | -------- | | 001 | Apple | 5 | | 001 | Banana | 10 | | 002 | Orange | 20 | | 004 | NULL | NULL |

在上面的例子中,订单号为 004 的订单在 order_details 表格中没有匹配的记录,因此返回的结果中其对应的 Product 和 Quantity 均为 NULL。

总结

内连接和外连接都是在关系型数据库中用于连接两个或多个表格的方法。内连接只返回两个表格中相匹配的记录;外连接可以返回两个表格中全部或部分的记录。程序员在进行 SQL 数据库开发时常常会用到这两种方法,因此这是一个非常重要的话题。