对多表查询进行分类,
根据连接条件中是否出现等式,可分为等值连接和非等值连接。
根据连接条件是否自我引用了,可分为自连接和非自连接。
根据连接结果,可分为内连接和外连接。
等值连接和非等值连接
等值连接
查询员工的employee_id,last_name,department_id,department_name,location_id,city。
# 等值连接
SELECT e.employee_id,e.last_name,e.department_id,d.department_name,l.location_id,l.city
FROM employees e,departments d,locations l
WHERE e.department_id = d.department_id
AND d.location_id = l.location_id; -- 返回106条记录
非等值连接
查询员工的工资,工资等级。
SELECT e.employee_id,e.last_name,e.salary,j.grade_level
FROM employees e,job_grades j
WHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal;
SELECT e.employee_id,e.last_name,e.salary,j.grade_level
FROM employees e,job_grades j
WHERE e.salary >= j.lowest_sal AND e.salary <= j.highest_sal;
自连接和非自连接
自连接
# 查询员工id、姓名及其管理者的id和姓名
SELECT e1.employee_id,e1.last_name,e2.employee_id,e2.last_name
FROM employees e1,employees e2
WHERE e1.manager_id = e2.employee_id; -- 返回106条记录
非自连接
以上的等值连接和非等值连接的示例都属于非自连接。
内连接和外连接
内连接
# 查询员工id及其所在部门
SELECT e.employee_id,d.department_name
FROM employees e,departments d
WHERE e.department_id = d.department_id;
外连接
外连接,又分为左外连接、右外连接和满外连接。
- 左外连接。两个表在连接过程中除了返回满足连接条件的行以外,还返回左表中不满足条件的行。
- 右外连接。两个表在连接过程中除了返回满足连接条件的行以外,还返回了右表中不满足条件的行。
- 满外连接或全外连接。