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