SQL Join 基础
到目前为止,您看到的所有查询都集中在一个表上。但在现实情况中,经常需要查询多个表,然后合并结果。在技术上这被称为join/连接,join根据多个表之间的一个共同字段(外键)来创建新的视图数据。
为了更容易理解这一点,让我们看一下下面的employees
和departments
表。employees
表的dept_id
列是departments
表的外键。因此,可以将这两个表连接起来来获得组合的数据。
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 |
+--------+--------------+------------+---------+
departments
+---------+------------------+
| dept_id | dept_name |
+---------+------------------+
| 1 | Administration |
| 2 | Customer Service |
| 3 | Finance |
| 4 | Human Resources |
| 5 | Sales |
+---------+------------------+
Join/连接类型
当连接表时,不同连接类型会影响查询结果。有以下几种连接类型:
Inner join/内连接
仅将两个表中满足连接条件的行组合起来作为结果集。
Outer join/外连接
在内连接的基础上,还包含不符合条件的数据行,在不匹配的表列填写NULL
有三种类型的外部连接:
- 左外部连接(或左连接)
- 右外部连接(或右连接)
- 全外部连接(或全连接)
Cross join/交叉连接
将两个表的所有行进行组合,连接后的行数为两个表的乘积数(笛卡尔积)。