文章目录
- 18.1 连接查询
- 18.2 内连接
- 18.3 左外连接
- 18.4 右外连接
- 18.5 全外连接
- 18.6 交叉连接
- 18.7 自然连接
- 18.8 自连接
- 18.9 多表连接
18.1 连接查询
关系型数据库通常采用规范化的设计方式,将不同的实体对象和它们之间的联系存储到多个表中。比如员工的个人信息存储在 employee 表中,部门相关的信息存储在 department 表中,同时 employee 表中存在一个外键字段(dept_id),引用了 department 表的主键字段。
因此,当我们想要查看员工的个人信息以及他/她所在的部门信息,就需要同时查询 employee 和 department 表中的信息。此时,我们需要使用连接查询。连接查询(join)可以基于两个表中的连接字段将数据行拼接到一起,返回两个表中的相关数据。
以下查询返回了人力资源部门中的所有员工信息:
select d.dept_id, e.dept_id, dept_name, e.emp_name, e.sex from employee e join department d on e.dept_id = d.dept_id where dept_name = '人力资源部';
其中, JOIN 表示连接查询,连接 employee 表和 department 表;ON 用于指定连接条件,这里表示 employee 中的部门编号等于 department 的部门编号。另外,查询语句中的 e 和 d 都是表的别名,当存在两个同名的字段时可以通过别名指定字段的来源。
该查询返回的结果如下:
dept_id|dept_id|dept_name |emp_name |sex| -------|-------|-------------|-----------|---| 2| 2|人力资源部 |诸葛亮 |男 | 2| 2|人力资源部 |黄忠 |男 | 2| 2|人力资源部 |魏延 |男 |
以上示例使用 JOIN 和 ON 关键字指定表的连接查询,属于 ANSI SQL/92 标准语法;对于该查询,也可以使用 FROM 和 WHERE 实现如下:
select d.dept_id, e.dept_id, dept_name, e.emp_name, e.sex from employee e, department d where dept_name = '人力资源部' and e.dept_id = d.dept_id;
这种使用 FROM 和 WHERE 关键字指定表的连接属于 ANSI SQL/86 标准。