MySQL中inner join和cross join的区别

首页 / 常见问题 / 低代码开发 / MySQL中inner join和cross join的区别
作者:低代码工具 发布时间:05-15 09:44 浏览量:4061
logo
织信企业级低代码开发平台
提供表单、流程、仪表盘、API等功能,非IT用户可通过设计表单来收集数据,设计流程来进行业务协作,使用仪表盘来进行数据分析与展示,IT用户可通过API集成第三方系统平台数据。
免费试用

MySQL中inner join和cross join的区别:1、功能不同;2、性能不同;3、使用场景不同;4、内容复杂度不同;5、数据一致性不同。功能不同是指INNER JOIN 是用于筛选符合连接条件的行,CROSS JOIN 则是用于返回两个表之间的笛卡尔积。

一、MySQL中inner join和cross join的区别

1、功能不同

INNER JOIN 是用于筛选符合连接条件的行,以便将两个或多个表中的相关数据组合在一起。而 CROSS JOIN 则是用于返回两个表之间的笛卡尔积,也就是每一个行与另一个表中的每一行都组合一次。

2、性能不同

由于 CROSS JOIN 返回的结果集通常非常大,因此性能可能会比 INNER JOIN 差。INNER JOIN 通过连接条件将两个表进行匹配,只返回符合条件的匹配行。相对来说,INNER JOIN 更加高效。

3、使用场景不同

INNER JOIN 通常在需要组合两个或多个表中的相关数据时使用。CROSS JOIN 通常用于需要展示所有行组合的情况。比如,如果你需要生成一个未来七天每一天都有哪些用户的报告,就可以使用 CROSS JOIN 来生成未来七天的日期,然后再将该日期与用户表进行组合。

4、内容复杂度不同

由于 INNER JOIN 仅返回与连接条件匹配的行,因此结果集通常较为简单和易于理解。而 CROSS JOIN 返回笛卡尔积,通常会生成更多的行,也更难以理解。

5、数据一致性不同

由于 INNER JOIN 仅匹配符合连接条件的行,因此结果集保持了相对较高的数据一致性。而 CROSS JOIN 的结果集可能非常大,其中可能包含许多无关的行,因此数据一致性可能会降低。

二、MySQL连接的使用

JOIN 按照功能大致分为如下三类:

  • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
  • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
  • RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

1、在命令提示符中使用INNER JOIN实例

我们在RUNOOB数据库中有两张表 tcount_tbl 和 runoob_tbl。两张数据表数据如下:

//测试实例数据
mysql> use RUNOOB;
Database changed
mysql> SELECT * FROM tcount_tbl;
+---------------+--------------+
| runoob_author | runoob_count |
+---------------+--------------+
| 菜鸟教程  | 10           |
| RUNOOB.COM    | 20           |
| Google        | 22           |
+---------------+--------------+
3 rows in set (0.01 sec)
 
mysql> SELECT * from runoob_tbl;
+-----------+---------------+---------------+-----------------+
| runoob_id | runoob_title  | runoob_author | submission_date |
+-----------+---------------+---------------+-----------------+
| 1         | 学习 PHP    | 菜鸟教程  | 2017-04-12      |
| 2         | 学习 MySQL  | 菜鸟教程  | 2017-04-12      |
| 3         | 学习 Java   | RUNOOB.COM    | 2015-05-01      |
| 4         | 学习 Python | RUNOOB.COM    | 2016-03-06      |
| 5         | 学习 C      | FK            | 2017-04-05      |
+-----------+---------------+---------------+-----------------+
5 rows in set (0.01 sec)

接下来我们就使用MySQL的INNER JOIN(也可以省略 INNER 使用 JOIN,效果一样)来连接以上两张表来读取runoob_tbl表中所有runoob_author字段在tcount_tbl表对应的runoob_count字段值:

//INNER JOIN
mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
+-------------+-----------------+----------------+
| a.runoob_id | a.runoob_author | b.runoob_count |
+-------------+-----------------+----------------+
| 1           | 菜鸟教程    | 10             |
| 2           | 菜鸟教程    | 10             |
| 3           | RUNOOB.COM      | 20             |
| 4           | RUNOOB.COM      | 20             |
+-------------+-----------------+----------------+
4 rows in set (0.00 sec)

以上 SQL 语句等价于:

//WHERE 子句
mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a, tcount_tbl b WHERE a.runoob_author = b.runoob_author;
+-------------+-----------------+----------------+
| a.runoob_id | a.runoob_author | b.runoob_count |
+-------------+-----------------+----------------+
| 1           | 菜鸟教程    | 10             |
| 2           | 菜鸟教程    | 10             |
| 3           | RUNOOB.COM      | 20             |
| 4           | RUNOOB.COM      | 20             |
+-------------+-----------------+----------------+
4 rows in set (0.01 sec)

2、MySQL LEFT JOIN实例

以 runoob_tbl 为左表,tcount_tbl 为右表,理解 MySQL LEFT JOIN 的应用:

//LEFT JOIN
mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a LEFT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
+-------------+-----------------+----------------+
| a.runoob_id | a.runoob_author | b.runoob_count |
+-------------+-----------------+----------------+
| 1           | 菜鸟教程    | 10             |
| 2           | 菜鸟教程    | 10             |
| 3           | RUNOOB.COM      | 20             |
| 4           | RUNOOB.COM      | 20             |
| 5           | FK              | NULL           |
+-------------+-----------------+----------------+
5 rows in set (0.01 sec)

以上实例中使用了 LEFT JOIN,该语句会读取左边的数据表 runoob_tbl 的所有选取的字段数据,即使在右侧表 tcount_tbl中 没有对应的 runoob_author 字段值。

3、MySQL RIGHT JOIN实例

以 runoob_tbl 为左表,tcount_tbl 为右表,理解MySQL RIGHT JOIN的应用:

//RIGHT JOIN
mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a RIGHT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
+-------------+-----------------+----------------+
| a.runoob_id | a.runoob_author | b.runoob_count |
+-------------+-----------------+----------------+
| 1           | 菜鸟教程    | 10             |
| 2           | 菜鸟教程    | 10             |
| 3           | RUNOOB.COM      | 20             |
| 4           | RUNOOB.COM      | 20             |
| NULL        | NULL            | 22             |
+-------------+-----------------+----------------+
5 rows in set (0.01 sec)

以上实例中使用了 RIGHT JOIN,该语句会读取右边的数据表 tcount_tbl 的所有选取的字段数据,即使在左侧表 runoob_tbl 中没有对应的runoob_author 字段值。

延伸阅读1:RDBMS特点

RDBMS即关系数据库管理系统(Relational Database Management System)的特点:

  • 数据以表格的形式出现
  • 每行为各种记录名称
  • 每列为记录名称所对应的数据域
  • 许多的行和列组成一张表单
  • 若干的表单组成database
最后建议,企业在引入信息化系统初期,切记要合理有效地运用好工具,这样一来不仅可以让公司业务高效地运行,还能最大程度保证团队目标的达成。同时还能大幅缩短系统开发和部署的时间成本。特别是有特定需求功能需要定制化的企业,可以采用我们公司自研的企业级低代码平台织信Informat。 织信平台基于数据模型优先的设计理念,提供大量标准化的组件,内置AI助手、组件设计器、自动化(图形化编程)、脚本、工作流引擎(BPMN2.0)、自定义API、表单设计器、权限、仪表盘等功能,能帮助企业构建高度复杂核心的数字化系统。如ERP、MES、CRM、PLM、SCM、WMS、项目管理、流程管理等多个应用场景,全面助力企业落地国产化/信息化/数字化转型战略目标。 版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们微信:Informat_5 处理,核实后本网站将在24小时内删除。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系邮箱:hopper@cornerstone365.cn 处理,核实后本网站将在24小时内删除。

最近更新

国内低代码开发平台有哪些,有何特点,以及哪个好用?
07-25 17:40
苏州SCRM系统哪家好?多维度解析助您优选SCRM系统解决方案
07-24 18:04
温州scrm哪家好?全面解析助您找到最适合的解决方案
07-24 18:04
企业scrm管理哪家好?全面剖析助您明智选择
07-24 18:04
企微SCRM系统哪个好?全面解析助您找到最佳方案
07-24 18:04
嘉兴项目scrm哪家好?深度剖析优质选择
07-24 18:04
《SCRM系统痛点有哪些?你知道吗?》
07-24 18:04
SCRM系统针对哪些企业?全行业适用情况大揭秘
07-24 18:04
嘉兴SCRM系统哪家好?挑选时需考量这些方面
07-24 18:04

立即开启你的数字化管理

用心为每一位用户提供专业的数字化解决方案及业务咨询

  • 深圳市基石协作科技有限公司
  • 地址:深圳市南山区科发路8号金融基地1栋5F5
  • 手机:137-1379-6908
  • 邮箱:sales@cornerstone365.cn
  • 微信公众号二维码

© copyright 2019-2025. 织信INFORMAT 深圳市基石协作科技有限公司 版权所有 | 粤ICP备15078182号

前往Gitee仓库
微信公众号二维码
咨询织信数字化顾问获取最新资料
数字化咨询热线
137-1379-6908
申请预约演示
立即与行业专家交流