1、概念
多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。
前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键。 比如:员工表和部门表,这两个表依靠“部门编号”进行关联。
2、分类
- 等值连接 和 非等值连接
- 自连接 和 非自连接
- 内连接 和 外连接
3、 等值连接和非等值连接
3.1 等值连接
两个或以上表中存在同一个属性,通过属性相等进行连接。
# SQL92标准
#1. 普通多表查询
SELECT last_name , department_name
FROM employees,departments
WHERE employees.department_id = departments.department_id;
# 2. 采用对表名别名
SELECT last_name,department_name
FROM employees emp,departments dept
WHERE emp.department_id = dept.department_id;
# 3.查询三个表
SELECT last_name,department_name,street_address
FROM employees emp,departments dept,locations lo
WHERE emp.department_id = dept.department_id
AND dept.location_id=lo.location_id;
#SQL99标准
SELECT last_name , department_name
FROM employees JOIN departments
ON employees.department_id = departments.department_id;
注意点:
- 多个连接条件与用AND 操作符
- 区分重复的列名: 多个表中有相同列时,必须在列名之前加上表名前缀。
- 在不同表中具有相同列名的列可以用 表名 加以区分。
- 使用别名可以简化查询。但是需要注意的是,如果我们使用了表的别名,在查询字段中、过滤条件中就只能使用别名进行代替,不能使用原有的表名,否则就会报错。
- 连接 n个表,至少需要n-1个连接条件。
3.2 非等值连接
两个或者多个表连接条件不是通过等号进行连接的
SELECT employee_id,salary
FROM employees emp,job_grades j
WHERE emp