假设我们有两个表:employees
和 departments
。employees
表包含员工信息,departments
表包含部门信息。下面是这两个表的简化结构:
employees
表:
- employee_id (员工ID)
- first_name (名字)
- last_name (姓氏)
- department_id (部门ID)
departments
表:
- department_id (部门ID)
- department_name (部门名称)
我们将使用四种类型的连接操作演示如何将这两个表的数据关联起来。使用以下示例数据进行操作:
employees
表数据:
employee_id | first_name | last_name | department_id |
---|---|---|---|
1 | John | Doe | 1 |
2 | Jane | Smith | 2 |
3 | Mike | Johnson | 2 |
4 | Sarah | Brown | NULL |
departments
表数据:
department_id | department_name |
---|---|
1 | HR |
2 | IT |
3 | Finance |
我们将使用别名(e
表示 employees
,d
表示 departments
)重写上述查询,并展示查询结果:
- INNER JOIN(内连接):
SELECT e.first_name, e.last_name, d.department_name
FROM employees AS e
INNER JOIN departments AS d ON e.department_id = d.department_id;
查询结果:
first_name | last_name | department_name |
---|---|---|
John | Doe | HR |
Jane | Smith | IT |
Mike | Johnson | IT |
此查询将列出所有员工及其所属部门。INNER JOIN 只返回两个表中都有匹配的行。
- LEFT JOIN(左连接):
SELECT e.first_name, e.last_name, d.department_name
FROM employees AS e
LEFT JOIN departments AS d ON e.department_id = d.department_id;
查询结果:
first_name | last_name | department_name |
---|---|---|
John | Doe | HR |
Jane | Smith | IT |
Mike | Johnson | IT |
Sarah | Brown | NULL |
此查询将列出所有员工及其所属部门。如果某个员工没有部门,将显示 NULL 值。LEFT JOIN 返回左表中的所有行,即使在右表中没有匹配。
- RIGHT JOIN(右连接):
SELECT e.first_name, e.last_name, d.department_name
FROM employees AS e
RIGHT JOIN departments AS d ON e.department_id = d.department_id;
查询结果:
first_name | last_name | department_name |
---|---|---|
John | Doe | HR |
Jane | Smith | IT |
Mike | Johnson | IT |
NULL | NULL | Finance |
此查询将列出所有员工及其所属部门。如果某个部门没有员工,将显示 NULL 值。RIGHT JOIN 返回右表中的所有行,即使在左表中没有匹配。
- FULL OUTER JOIN(全外连接):
SELECT e.first_name, e.last_name, d.department_name
FROM employees AS e
FULL OUTER JOIN departments AS d ON e.department_id = d.department_id;
查询结果:
first_name | last_name | department_name |
---|---|---|
John | Doe | HR |
Jane | Smith | IT |
Mike | Johnson | IT |
Sarah | Brown | NULL |
NULL | NULL | Finance |
全外连接(FULL OUTER JOIN)是一种连接操作,它返回两个表中所有的行。如果某一行在另一个表中没有匹配项,则结果集中将显示 NULL 值。换句话说,全外连接将返回左连接(LEFT JOIN)和右连接(RIGHT JOIN)的结果的并集。
在上述示例中,FULL OUTER JOIN 查询结果包含了 employees
和 departments
表中的所有行。以下是查询结果:
first_name | last_name | department_name |
---|---|---|
John | Doe | HR |
Jane | Smith | IT |
Mike | Johnson | IT |
Sarah | Brown | NULL |
NULL | NULL | Finance |
如您所见,全外连接返回了以下内容:
- 两个表中都有匹配项的行:John Doe(HR)、Jane Smith(IT)和 Mike Johnson(IT)。
- 只在
employees
表中存在的行:Sarah Brown。这个员工没有与之关联的部门,所以department_name
列显示 NULL。 - 只在
departments
表中存在的行:Finance。这个部门没有与之关联的员工,所以first_name
和last_name
列显示 NULL。
总之,全外连接查询返回了两个表中所有可能的关联行,无论它们是否实际关联。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/181635.html