当前位置: 首页 > news >正文

SQL隐式链接显式连接

笛卡尔积(Cartesian Product)是集合论里最基础的概念之一,也是 SQL 里最容易“不小心整出大数据灾难”的元凶。
一句话:

把两个集合的元素“无脑”两两配对,得到所有可能的组合。


1. 数学定义

集合 A = {a₁, a₂}
集合 B = {b₁, b₂, b₃}
A × B = {
(a₁, b₁), (a₁, b₂), (a₁, b₃),
(a₂, b₁), (a₂, b₂), (a₂, b₃)
}
元素个数 |A × B| = |A| × |B| = 2×3 = 6


2. SQL 里的笛卡尔积

产生场景:忘了写 / 写错 JOIN 条件

--- sql

SELECT *
FROM emp, dept;          -- 旧式写法,无关联条件
-- 或
SELECT *
FROM emp
CROSS JOIN dept;         -- 显式交叉连接(MySQL/PostgreSQL 支持)
  • emp 14 行,dept 4 行 → 结果 14×4 = 56 行

  • 只想要“员工所在部门”的 14 行,却多出 42 行垃圾数据 → 数据膨胀 + 错误汇总


3. 排查口诀

  1. 结果行数远大于单表行数 → 先怀疑笛卡尔积

  2. EXPLAINtype=ALLrows=乘积 → 基本坐实

  3. 给每张表补 ON 条件或 WHERE 等值关联,让乘积变回 1:1/1:N


4. 什么时候“故意”用它?

  • 生成测试数据:快速造出所有组合

  • 维度矩阵:如颜色×尺码 得到 SKU 列表

  • 日历填充:日期表×门店表 生成每日营业记录模板


5. 一句话总结

笛卡尔积就是“无脑全组合”,数学上优雅,SQL 里致命;
写 JOIN 忘 ON,性能立刻崩塌,数据立刻造假。

SQL隐式链接显式连接

在 SQL 里,“隐式连接”“显式连接” 只是写法差异,执行结果可能一模一样,但可读性、可维护性、出错概率天差地别。下面给你一张对照表,一眼看懂。


1. 写法对比(以 MySQL 方言为例)

表格

复制

场景隐式连接(旧式)显式连接(SQL-92 标准)
内连接SELECT *
SELECT *
左外连接没有语法,只能 UNION 补 NULLSELECT *
右外连接❌同上RIGHT JOIN ...
全外连接❌同上FULL OUTER JOIN ...(MySQL 8 无,需 UNION)

2. 核心区别

表格

复制

维度隐式连接显式连接
连接条件位置混杂在 WHERE 里独立 ON 子句
误写笛卡尔积概率高:忘了 WHERE 条件立刻 14×4 行低:没写 ON 直接语法报错
外连接支持无原生语法,全靠 UNION 手工补原生 LEFT/RIGHT/FULL
可读性表多时 WHERE 里一堆 AND,眼花JOIN ... ON ... 一眼看出关联键
可维护性业务过滤与连接条件混一起,改到崩溃分离清晰,改业务只动 WHERE
标准化SQL-89 旧标准,已废弃建议SQL-92 至今标准,推荐

3. 执行计划一样吗?

  • 现代优化器(MySQL 8、PostgreSQL、SQL Server、Oracle)对两种写法几乎生成相同计划,性能无差异。

  • 可读性 + 防错 > 性能,显式连接仍是唯一推荐。


4. 一句话总结

隐式连接是“把连接条件藏在 WHERE”的老派写法,忘了条件就秒变笛卡尔积;
显式连接用 JOIN ... ON ... 把关联键亮出来,语法报错帮你防错,外连接也原生支持——新代码别再写逗号连接了。


文章转载自:

http://EtHiBlCr.qzkfx.cn
http://AydftDJy.qzkfx.cn
http://24rZtTU0.qzkfx.cn
http://LAYkdQaA.qzkfx.cn
http://buWJeD7r.qzkfx.cn
http://WN5MdJFl.qzkfx.cn
http://1Gr5ENxH.qzkfx.cn
http://JM52AR3S.qzkfx.cn
http://14feSN2J.qzkfx.cn
http://QNS7H2Uk.qzkfx.cn
http://Jn9Hh5S6.qzkfx.cn
http://LPhBNkV8.qzkfx.cn
http://5lmZOc2U.qzkfx.cn
http://K1ISc0Tj.qzkfx.cn
http://JDQgezLs.qzkfx.cn
http://cNsFaT6E.qzkfx.cn
http://W2LX15jU.qzkfx.cn
http://dHJZq4T0.qzkfx.cn
http://fjfExLih.qzkfx.cn
http://bwtwGRzb.qzkfx.cn
http://mzuL7hfR.qzkfx.cn
http://1Y86PBAO.qzkfx.cn
http://xtYh6I24.qzkfx.cn
http://10yRKobk.qzkfx.cn
http://wQfv46dt.qzkfx.cn
http://HQlDEiUJ.qzkfx.cn
http://FhrOBKV4.qzkfx.cn
http://wQwvbTmN.qzkfx.cn
http://MarQzeK6.qzkfx.cn
http://AYnZMGxv.qzkfx.cn
http://www.dtcms.com/a/374154.html

相关文章:

  • pd19虚拟机安装Win11系统
  • 【面试场景题】如何进行高并发系统的性能测试?
  • Keepalived配置好后,域名解析到哪里
  • 滑动窗口题目:长度最小的子数组
  • 如何Maven 构建问题排查与依赖管理
  • 嵌入式学习日记(42)ARM
  • 盖奇的遭遇__[心理学和脑科学神经科学](1)
  • CSS-基础认知(基础篇)
  • 淘宝商品数据爬虫 API 实战开发指南:合规化采集与高效数据处理
  • BBEH:大模型高阶推理能力的“超难”试金石
  • 训诂学与现代人工智能的融合——学术价值、技术潜力与未来展望
  • 【面试题】Transformer创新应用
  • KGDB(Kernel GNU Debugger)工具使用方法详解
  • 架构思维升维:用三层模型穿透技术表象,驾驭复杂系统——淘宝亿级并发架构演进启示录
  • Java设计模式之结构型—装饰器模式
  • Python编程基础(八) | 类
  • Ubuntu1804安装SonarQube
  • commons-lang3
  • 分布式专题——4 大厂生产级Redis高并发分布式锁实战
  • Infortrend普安科技IEC私有云平台VM解决方案
  • 实战对比:百炼知识库与钉钉知识库的全方位对比
  • GitLab升级后仓库镜像信任证书导入问题
  • 2. 计算机系统基础知识
  • 软考中级习题与解答——第三章_操作系统(2)
  • 第七届全球校园人工智能算法精英大赛-算法巅峰赛产业命题赛--算法题科普
  • 【CentOS7】使用yum安装出错,报HTTPS Error 404 - Not Found
  • 今天继续学习shell脚本
  • 解决哈希冲突
  • C++算法专题学习:栈相关的算法
  • CentOS部署ELK Stack完整指南