全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

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

发布时间:2023-10-11 23:01:24
发布人:xqq

一、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和指向数据的指针,而数据则按插入顺序存放。我们称这种数据组织方式为堆组织方式。

#it技术干货

相关文章

怎样在MySQL表中存储树形结构数据?

怎样在MySQL表中存储树形结构数据?

2023-10-11
redis似乎并没有“事务”,那些用到“事务”的人在做什么?

redis似乎并没有“事务”,那些用到“事务”的人在做什么?

2023-10-11
mysql inner join为什么不走索引?

mysql inner join为什么不走索引?

2023-10-11
mysql的MEMORY引擎为什么没有redis的应用广泛?

mysql的MEMORY引擎为什么没有redis的应用广泛?

2023-10-11

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取