SQL 连接表
在本教程中,你将学习如何连接两个表以获取组合数据。
SQL Join Fundamentals
到目前为止,你看到的所有查询都集中在一个表上。但在现实生活中,你经常需要及时查询两个或更多表,并带来一个组合结果集。这在技术上被称为连接,因为它涉及基于它们之间的公共字段(外键)来连接不同的表以创建数据的新视图。
为了便于理解,让我们看看以下 employees 和 departments 表。这里,employees 表的 dept_id 列是 departments 表的外键。因此,可以连接这两个表以获取组合数据。 ** **
Table: employees
+--------+--------------+------------+---------+
| emp_id | emp_name | hire_date | dept_id |
+--------+--------------+------------+---------+
| 1 | Ethan Hunt | 2001-05-01 | 4 |
| 2 | Tony Montana | 2002-07-15 | 1 |
| 3 | Sarah Connor | 2005-10-18 | 5 |
| 4 | Rick Deckard | 2007-01-03 | 3 |
| 5 | Martin Blank | 2008-06-24 | NULL |
+--------+--------------+------------+---------+
Table: departments
+---------+------------------+
| dept_id | dept_name |
+---------+------------------+
| 1 | Administration |
| 2 | Customer Service |
| 3 | Finance |
| 4 | Human Resources |
| 5 | Sales |
+---------+------------------+
注意: 为了连接表,用于连接表的列的数据应该匹配,而不一定是列名。
连接类型
连接表时,在查询中创建的连接类型会影响结果集中显示的行。你可以创建以下类型的连接:
内部联接
一个连接,仅返回两个连接表中具有匹配项的行。例如,你可以加入 employees 和 departments 表以创建显示每个员工的部门名称的结果集。在内部联接中,没有部门信息的员工不包括在结果集中,也不包括没有员工的部门。
我们将在下一章中详细了解内连接。
外联接
外连接是内连接的扩展。外连接返回行,即使它们在连接表中没有相关行。外连接有三种类型:左外连接(或左连接),右外连接(或右连接)和全外连接(或完全连接)。
我们将在后面的章节中详细了解外连接的这些变体。
交叉连接
交叉连接是没有连接条件的连接。一个表的每一行与另一个表的每一行组合。这种类型的结果集称为笛卡尔积或交叉积。例如,employees 和 departments 表之间的交叉联接会生成一个结果集,每个可能的 employees/departments
组合都有一行。
我们将在后续章节中详细了解交叉连接。