1. 定义
- 多表查询,也称为关联查询,指两个或更多个表一起完成查询操作
- 前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键。比如:员工表和部门表,这两个表依靠“部门编号”进行关联
1.1 笛卡尔积的错误
SELECT last_name, department_name FROM employees, departments;
- employees表中有107条数据
- departments表中有27条数据
- 上述的查询语句,查出来了2889条数据,而2889 = 107 * 27;这种查询出来的错误,称为:笛卡尔积的错误。
1.2 笛卡尔积(或交叉连接)的理解
- 笛卡尔乘积是一个数学运算。假设我有两个集合 X 和 Y,那么 X 和 Y 的笛卡尔积就是 X 和 Y 的所有可能组合,也就是第一个对象来自于 X,第二个对象来自于 Y 的所有可能。组合的个数即为两个集合中元素个数的乘积数
笛卡尔积的错误会在下面条件下产生:
- 省略多个表的连接条件(或关联条件)
- 连接条件(或关联条件)无效
- 所有表中的所有行互相连接
- 为了避免笛卡尔积, 可以
在 WHERE 加入有效的连接条件
SELECT last_name, department_name FROM employees, departments
WHERE employees.department_id = departments.department_id; #连接条件
- 在 WHERE子句中写入连接条件
- 在表中有相同列时,在列名之前加上表名前缀