📜  sql 合并两个表的结果 - SQL (1)

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

SQL 合并两个表的结果

在 SQL 中,可以使用 JOIN 关键字将两个或多个表的行合并为一个结果集。在本文中,我们将介绍两种常见的方法来合并两个表的结果。

内连接(INNER JOIN)

内连接是最常见的表连接类型,它只返回两个表中共有的行。例如,我们有两个表 EmployeesDepartments,它们的结构如下:

Employees Table:
+----+-----------+----------+--------+
| ID | FirstName | LastName | DeptID |
+----+-----------+----------+--------+
| 1  | John      | Smith    | 1      |
| 2  | Jane      | Doe      | 1      |
| 3  | Tom       | Jones    | 2      |
+----+-----------+----------+--------+

Departments Table:
+--------+-------------+
| DeptID | DeptName    |
+--------+-------------+
| 1      | Sales       |
| 2      | IT          |
| 3      | Marketing   |
+--------+-------------+

如果我们想要查询每个雇员的名字和所属部门的名称,我们可以使用内连接来将这两个表合并起来:

SELECT FirstName, LastName, DeptName
FROM Employees
INNER JOIN Departments
ON Employees.DeptID = Departments.DeptID;

这会返回以下结果:

+-----------+----------+-------------+
| FirstName | LastName | DeptName    |
+-----------+----------+-------------+
| John      | Smith    | Sales       |
| Jane      | Doe      | Sales       |
| Tom       | Jones    | IT          |
+-----------+----------+-------------+
外连接(OUTER JOIN)

另一种常见的连接类型是外连接,它可以返回两个表中的所有行,即使它们没有匹配的行。外连接分为左外连接和右外连接,取决于您希望从哪个表返回所有行。

以左外连接为例,我们可以查询每个部门以及该部门的所有员工。如果一个部门没有任何员工,我们也会返回该部门的信息。以下是查询的 SQL 代码:

SELECT DeptName, FirstName, LastName
FROM Departments
LEFT OUTER JOIN Employees
ON Departments.DeptID = Employees.DeptID;

这会返回以下结果:

+-------------+-----------+----------+
| DeptName    | FirstName | LastName |
+-------------+-----------+----------+
| Sales       | John      | Smith    |
| Sales       | Jane      | Doe      |
| IT          | Tom       | Jones    |
| Marketing   | NULL      | NULL     |
+-------------+-----------+----------+

可以看到,在最后一行中,FirstNameLastName 值为空。这是因为 Marketing 部门没有员工,所以在拓展 Employees 表时没有匹配到任何值。

结论

使用内连接和外连接,您可以将两个或多个表合并为一个结果集。请记住:

  • 内连接只返回两个表中匹配的行。
  • 左外连接和右外连接分别返回左表和右表中的所有行。
  • 只返回左表或右表的行时,可以使用 LEFTRIGHT 关键字。

以上就是 SQL 合并两个表的结果的介绍和代码实现,希望对您有帮助。