0
点赞
收藏
分享

微信扫一扫

MYSQL多表查询

多表查询

多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。

前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个 关联字段可能建立了外键,也可能没有建立外键。比如:员工表和部门表,这两个表依靠“部门编号”进 行关联。

1.笛卡尔积(或交叉连接)的理解

笛卡尔乘积是一个数学运算。假设我有两个集合 X 和 Y,那么 X 和 Y 的笛卡尔积就是 X 和 Y 的所有可能 组合,也就是第一个对象来自于 X,第二个对象来自于 Y 的所有可能。组合的个数即为两个集合中元素 个数的乘积数。

image.png

笛卡尔积的错误会在下面条件下产生:

  • 省略多个表的连接条件(或关联条件)
  • 连接条件(或关联条件)无效
  • 所有表中的所有行互相连接
  • 为了避免笛卡尔积, 可以在 WHERE 加入有效的连接条件
  • 加入连接条件后,查询语法:
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column1 = table2.column2; #连接条件
  • 在表中有相同列时,在列名之前加上表名前缀。
#案例:查询员工的姓名及其部门名称
SELECT last_name, department_name
FROM employees, departments
WHERE employees.department_id = departments.department_id;

2.多表查询分类

分类1:等值连接 vs 非等值连接

等值连接

image.png

  • 区分重复的列名

    • 多个表中有相同列时,必须在列名之前加上表名前缀。
    • 在不同表中具有相同列名的列可以用 表名 加以区分
  • 表的别名

    • 使用别名可以简化查询。
    • 列名前使用表名前缀可以提高查询效率。
  • 连接多个表

总结:连接 n个表,至少需要n-1个连接条件。

非等值连接

image.png

分类2:自连接 vs 非自连接

需要联接自己才能完成相关的查询操作,此时的联接被称为自连接,此时联接的两张表为,自己和自己,

分类3:内连接 vs外连接
  • 内连接: 合并具有同一列的两个以上的表的行, 结果集中不包含一个表与另一个表不匹配的行

内连接查询的是两张表的并集,也就是A表和B表都必须有数据才能查询出来;

image.pngimage-20230301163502408

  • 外连接: 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的 行 ,这种连接称为左(或右) 外连接。没有匹配的行时, 结果表中相应的列为空(NULL)。 image.png

  • 如果是左外连接,则连接条件中左边的表也称为 主表 ,右边的表称为 从表 。 如果是右外连接,则连接条件中右边的表也称为 主表 ,左边的表称为 从表 。

举报

相关推荐

0 条评论