MySQL 联合查询执行原理:多表笛卡尔积

MySQL 联合查询执行原理:多表笛卡尔积

在 MySQL 执行多表联合查询时,如果没有指定连接条件(如 JOIN...ONWHERE),系统会执行最基础的笛卡尔积运算。

1. 基础数据准备

学生表 (Table A)

id (编号) name (姓名) gender (性别)
1 张三
2 李四
3 王五
4 赵六

班级表 (Table B)

id (编号) name (班级)
1 1班
2 2班

2. 笛卡尔积的执行过程

对多张表进行笛卡尔积时,MySQL 会遵循以下逻辑进行组合:

  1. 取第一条记录:先从第一张表(学生表)中取出第一条记录(张三)。
  2. 全量组合 :将这条记录分别与第二张表(班级表)中的每一条记录进行组合,生成新的记录。
  • 张三 + 1班 生成第1条结果
  • 张三 + 2班 生成第2条结果
  1. 循环往复:接着取出学生表的第二条记录(李四),再次与班级表的所有记录组合。
  2. 最终结果 :直到遍历完第一张表的所有行,得到一个全排列结果集

3. 联合查询结果集 (全排列)

最终生成的查询结果如下表所示:

id 姓名 性别 班级.id 班级名
1 张三 1 1班
1 张三 2 2班
2 李四 1 1班
2 李四 2 2班
3 王五 1 1班
3 王五 2 2班
4 赵六 1 1班
4 赵六 2 2班

相关推荐
java_logo1 小时前
Docker 部署 Milvus:轻松搭建高性能向量数据库平台
数据库·docker·私有化部署·milvus·向量数据库·rag·轩辕镜像
A心有千千结1 小时前
GO 使用 OpenTelemetry 进行编译时插桩,实现零码注入
数据库·golang·可观测性·观测云
GreatVicent2 小时前
腾讯AI产业大会解读:Agent进场,企业基础设施怎么搭
大数据·数据库·人工智能·llm·agent·企业信息化
大模型码小白2 小时前
告别造假数据,直接连数据库查真实时序数据喂给 TimechoAI 大模型
java·数据库·人工智能·microsoft·架构
晚安日记wanna2 小时前
大表 DDL 面试翻车现场Online DDL 为什么还会锁死业务
数据库·面试·架构
IvorySQL2 小时前
PostgreSQL 日报|建库策略致备库静默丢数据(9 月 12 日)
数据库·人工智能·postgresql
这个DBA有点耶2 小时前
当Agent从“写SQL”变成“执行SQL”:数据库安全模型需要重新设计
数据库·aigc·dba
晚安日记wanna2 小时前
MySQL 主从延迟别只答并行复制
数据库·面试·架构
qq_401700413 小时前
Qt QUrl 详解与代码示例
开发语言·数据库·qt
程序员阿鹏4 小时前
如何实现MySQL分库分表?
数据结构·数据库·sql·mysql·缓存