SQL 联表查询(Join)

在本教程中,您将学习如何联接两个表以获取组合数据。

SQL连接基础

到目前为止,您所看到的所有查询都集中在一个表上。但是在现实生活中,您经常需要一次查询两个或多个表并带来合并的结果集。这在技术上称为联接,因为它涉及根据表之间的公共字段(外键)联接不同的表以创建数据的新视图。

为了容易理解这一点,让我们来看看下面employeesdepartments表。在这里,employees表的dept id列是departments表的外键。因此,可以将这两个表连接起来,得到组合的数据。

+--------+--------------+------------+---------+
| 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 |
+--------+--------------+------------+---------+

+---------+------------------+
| dept_id | dept_name        |
+---------+------------------+
|       1 | Administration   |
|       2 | Customer Service |
|       3 | Finance          |
|       4 | Human Resources  |
|       5 | Sales            |
+---------+------------------+
表: employees
表: departments

注意:为了联接表,用于联接表的列的数据应该匹配,而不必匹配列名。

联结类型

联接表时,在查询中创建的联接类型会影响结果集中显示的行。您可以创建以下类型的联接:

内联结(Inner join)

联接仅返回两个联接表中都具有匹配项的行。例如,您可以将employees和departments表联接在一起,以创建一个显示每个雇员的部门名称的结果集。在内部联接中,没有部门信息的雇员不包括在结果集中,没有雇员的部门也不会包括在结果集中。

在下一章中,我们将学习有关内部联接的更多信息。

外联结(Outer join)

外联接是内部联接的扩展。 即使外联接在联接表中没有相关行,外联接也会返回这些行。 外联接共有三种类型:左联接(left join),右联接(right join)和完全联接(full join)。

我们将在后面的章节中详细了解外部联接的这些变体。

交叉联接(Cross join)

交叉联接是没有联接条件的联接。一个表的每一行与另一表的每一行合并。这种类型的结果集称为笛卡尔乘积或叉积。例如,employeesdepartments表之间的交叉连接产生了一个结果集,其中每个可能的雇员/部门组合都有一行。

在接下来的章节中,我们将学习有关交叉连接的更多信息。