Mysql中from多表跟join表的区别

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Mysql中from多表跟join表的区别

在MySQL中,FROM多表和JOIN表都是用来进行表与表之间的数据关联操作,但它们在语义和执行方式上有所不同。

FROM多表

当你使用FROM关键字后面跟着多个表名,并通过WHERE子句来关联这些表时,你实际上是在执行一个多表查询,这种方式被称为“隐式内连接”。

SELECT *
FROM table1, table2
WHERE table1.id = table2.table1_id;

这种方式比较直观,但它的缺点是不够灵活,因为你只能在WHERE子句中指定连接条件。如果连接条件复杂或者需要连接多个表,这种写法可能会变得难以理解和维护。

JOIN

JOIN是一种更现代的语法,它允许你明确地指定表之间的连接类型(如内连接、左连接、右连接等),并且可以更清晰地表达连接逻辑。

SELECT *
FROM table1
JOIN table2 ON table1.id = table2.table1_id;

JOIN的优点在于:

  1. 清晰的语义JOIN关键字明确表示了表之间的连接关系,使得查询意图更加清晰。
  2. 灵活性:可以使用不同类型的连接(如INNER JOINLEFT JOINRIGHT JOIN等),并且可以轻松地连接多个表。
  3. 可读性:对于复杂的查询,使用JOIN可以使SQL语句更加易于理解和维护。

区别

  1. 语法FROM多表通常使用逗号分隔表名,而JOIN使用JOIN关键字和ON子句来指定连接条件。
  2. 表达力JOIN提供了更丰富的连接类型和更灵活的连接方式。
  3. 可读性JOIN通常被认为具有更好的可读性和可维护性,尤其是对于复杂的查询。
  4. 性能:在大多数情况下,FROM多表和JOIN在性能上没有显著差异,因为现代数据库优化器会将它们转换为相同的执行计划。但是,使用JOIN可以更清晰地指导数据库优化器。

总结

虽然FROM多表和JOIN表在功能上相似,但JOIN提供了更清晰、更灵活的方式来表达表之间的连接关系。在实际开发中,推荐使用JOIN语法,因为它的语义更明确,代码更易于理解和维护。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
18天前
|
存储 关系型数据库 MySQL
ES的全文索引和MySQL的全文索引有什么区别?如何选择?
【8月更文挑战第26天】ES的全文索引和MySQL的全文索引有什么区别?如何选择?
83 5
|
28天前
|
存储 关系型数据库 MySQL
mysql中的left join、right join 、inner join的详细用法
【8月更文挑战第16天】在MySQL中,`INNER JOIN`、`LEFT JOIN`与`RIGHT JOIN`用于连接多表。`INNER JOIN`仅返回两表中匹配的行;`LEFT JOIN`保证左表所有行出现于结果中,右表无匹配时以NULL填充;`RIGHT JOIN`则相反,保证右表所有行出现于结果中。例如,查询学生及其成绩时,`INNER JOIN`仅显示有成绩的学生;`LEFT JOIN`显示所有学生及他们对应的成绩,无成绩者成绩列为空;`RIGHT JOIN`显示所有成绩及对应学生信息,无学生信息的成绩条目则为空。
|
29天前
|
前端开发 关系型数据库 MySQL
com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver 的区别
这篇文章讨论了`com.mysql.jdbc.Driver`和`com.mysql.cj.jdbc.Driver`两个MySQL驱动类的区别,指出`com.mysql.jdbc.Driver`适用于MySQL 5的`mysql-connector-java`版本,而`com.mysql.cj.jdbc.Driver`适用于MySQL 6及以上版本的`mysql-connector-java`。文章还提到了在实际使用中如何根据MySQL版本选择合适的驱动类。
com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver 的区别
|
1月前
|
存储 SQL 关系型数据库
OceanBase与MySQL有何区别?
【8月更文挑战第12天】OceanBase与MySQL有何区别?
93 3
|
18天前
|
关系型数据库 MySQL
Mysql中count(1)、count(*)以及count(列)的区别
Mysql中count(1)、count(*)以及count(列)的区别
28 0
|
20天前
|
关系型数据库 MySQL 数据库
MySQL MVCC和间隙锁有什么区别?
【8月更文挑战第24天】MySQL MVCC和间隙锁有什么区别?
32 0
|
2月前
|
SQL 关系型数据库 MySQL
MySQL删除表数据、清空表命令(truncate、drop、delete 区别)
MySQL删除表数据、清空表命令(truncate、drop、delete区别) 使用原则总结如下: 当你不需要该表时(删除数据和结构),用drop; 当你仍要保留该表、仅删除所有数据表内容时,用truncate; 当你要删除部分记录、且希望能回滚的话,用delete;
|
2月前
|
SQL Java 数据库
MySQL设计规约问题之为什么应尽量避免使用子查询,而可以考虑将其优化为join操作
MySQL设计规约问题之为什么应尽量避免使用子查询,而可以考虑将其优化为join操作
|
2月前
|
关系型数据库 MySQL 数据库
MySQL:union all与union区别详解
MySQL:union all与union区别详解
|
2月前
|
SQL 关系型数据库 MySQL
学习mysql中使用inner join,left join 等
学习mysql中使用inner join,left join 等