在本教程中,您将学习如何联接两个表以获取组合数据。
到目前为止,您所看到的所有查询都集中在一个表上。但是在现实生活中,您经常需要一次查询两个或多个表并带来合并的结果集。这在技术上称为联接,因为它涉及根据表之间的公共字段(外键)联接不同的表以创建数据的新视图。
为了容易理解这一点,让我们来看看下面employees和departments表。在这里,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 |
注意:为了联接表,用于联接表的列的数据应该匹配,而不必匹配列名。
联接表时,在查询中创建的联接类型会影响结果集中显示的行。您可以创建以下类型的联接:
联接仅返回两个联接表中都具有匹配项的行。例如,您可以将employees和departments表联接在一起,以创建一个显示每个雇员的部门名称的结果集。在内部联接中,没有部门信息的雇员不包括在结果集中,没有雇员的部门也不会包括在结果集中。
在下一章中,我们将学习有关内部联接的更多信息。
外联接是内部联接的扩展。 即使外联接在联接表中没有相关行,外联接也会返回这些行。 外联接共有三种类型:左联接(left join),右联接(right join)和完全联接(full join)。
我们将在后面的章节中详细了解外部联接的这些变体。
交叉联接是没有联接条件的联接。一个表的每一行与另一表的每一行合并。这种类型的结果集称为笛卡尔乘积或叉积。例如,employees和departments表之间的交叉连接产生了一个结果集,其中每个可能的雇员/部门组合都有一行。
在接下来的章节中,我们将学习有关交叉连接的更多信息。