开发者社区> 问答> 正文

在MySQL查询中,为什么要使用join而不是在哪里?

似乎要合并两个或多个表,我们可以使用join或where。一个相对于另一个的优点是什么?

展开
收起
保持可爱mmm 2020-05-10 20:23:48 565 0
1 条回答
写回答
取消 提交回答
  • 任何涉及多个表的查询都需要某种形式的关联,以将结果从表“ A”链接到表“ B”。传统的(ANSI-89)方法是:

    在FROM子句中列出逗号分隔列表中涉及的表 在WHERE子句中编写表之间的关联

    SELECT * FROM TABLE_A a, TABLE_B b WHERE a.id = b.id 这是使用ANSI-92 JOIN语法重写的查询:

    SELECT * FROM TABLE_A a JOIN TABLE_B b ON b.id = a.id 从性能角度来看: 在受支持的地方(Oracle 9i +,PostgreSQL 7.2 +,MySQL 3.23 +,SQL Server 2000+),使用两种语法都不会对性能产生任何好处。优化器将它们视为相同的查询。但是更复杂的查询可以从使用ANSI-92语法中受益:

    控制JOIN顺序的能力-扫描表的顺序 能够在加入表格之前在表格上应用过滤条件 从维护角度: 在ANSI-89上使用ANSI-92 JOIN语法的原因有很多:

    更具可读性,因为JOIN标准与WHERE子句分开 不太可能错过JOIN标准 对除INNER之外的JOIN类型的一致语法支持,使查询易于在其他数据库上使用 WHERE子句仅用作连接表的笛卡尔积的过滤 从设计角度来看: ANSI-92 JOIN语法是模式,而不是反模式:

    查询的目的更加明显;应用程序使用的列很清楚 它遵循关于尽可能使用严​​格类型的模块化规则。显式普遍更好。 结论 缺乏熟悉度和/或舒适度,我认为继续使用ANSI-89 WHERE子句代替ANSI-92 JOIN语法没有任何好处。有人可能会抱怨ANSI-92语法更冗长,但这就是它的明确之处。越明确,就越容易理解和维护。来源:stack overflow

    2020-05-10 20:24:05
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像