Mysql连表查询使用join和where的区别对比?

目录
文章目录隐藏
  1. mysql 连表查询使用 join 和 where 的区别
  2. 延伸阅读

Mysql 连表查询使用 join 和 where 的区别对比?

mysql 连表查询使用 join 和 where 的区别

JOIN 的连接条件可以出现在 ON 关键字或者 WHERE 子句中,但是我们要特别注意 ON 条件和 WHERE 条件生效时机是不一样的,在大数据量情况下消耗的资源可能会存在很大的差异:

ON 条件:做为过滤两个连接表的笛卡尔积形成中间表的约束条件,生成的中间表已经是过滤后的数据 WHERE 条件:在有 ON 条件的两表或多表连接中,是过滤中间表的约束条件,中间表先生成出来再做过滤

此外,INNER JOIN 中两种条件的结果是相同的,但是用 LEFT JOIN 时(RIGHT JOIN 或 FULL JOIN 类似),因为无论 ON 的条件是否满足都会返回左表的所有记录,因此下面两个语句是不等价的:

SELECT * FROM tab1 LEFT JOIN tab2 ON (tab1.size = tab2.size) WHERE tab2.name=’AAA’;

SELECT * FROM tab1 LEFT JOIN tab2 ON (tab1.size = tab2.size AND tab2.name=’AAA’);

前面我们提到只要是返回 bool 值表达式都可以做为 JOIN 的连接条件,因此有人会在 ON 条件上直接写上形如 column1 != 100 的过滤条件,推荐用法是 ON 条件只进行连接操作,WHERE 则用于过滤中间表的记录。

延伸阅读

什么是 Memory 引擎?

Memory 引擎是 Mysql 的内存引擎,在实现上,Memory 存储引擎不同于 Innodb 这种组织索引结构(索引即是数据,即数据存放在主键索引上),而是将索引和数据分开存储。索引采用 Hash 的形式,存放主键 id 和指向数据的指针,而数据则按插入顺序存放。我们称这种数据组织方式为堆组织方式。

「点点赞赏,手留余香」

1

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
码云笔记 » Mysql连表查询使用join和where的区别对比?

发表回复