多表查询

发布时间 2023-05-24 15:53:16作者: 爱笑的小胡纸

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子句中写入连接条件
  • 在表中有相同列时,在列名之前加上表名前缀

2. 多表查询分类讲解