服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Sql Server - SQL 中的笛卡尔积

SQL 中的笛卡尔积

2023-10-11 15:25deelless Sql Server

笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员 。

SQL 中的笛卡尔积
1.概念

百度百科:

SQL 中的笛卡尔积

百度百科的解释不够严谨,用定义自己解释自己,使人费解

查资料后做一点补充:

定义:假设A和B是两个集合,存在一个集合,它的元素是用A中元素为第一元素,B中元素为第二元素构成的有序二元组,这个集合称为集合A和集合B的笛卡尔积,记为A X B。

eg:假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。

SQL 中的笛卡尔积

可以简单理解为两个集合的乘积
2.sql笛卡尔积语法
select * from table1,table2

其中table1和table2 分别表示两个表的表名

示例:
2.1 表1有2条数据

SQL 中的笛卡尔积

2.2 表2有3条数据

SQL 中的笛卡尔积

2.3 笛卡尔积有6条数据

SQL 中的笛卡尔积

从行和列两个维度来观察上例笛卡尔积的结果集可以发现,
结果集的行是表1的行数乘表2的行数(2x3)
结果集的列是表1的列加表2的列(3+4)
3.sql中的应用
3.1 高中数学集合中有介绍交集、并集、差集、笛卡尔积,一个sql语句可以理解成一个结果集,多个表的关联查询底层实际上是数学中集合和集合的关系。

进一步可以发现笛卡尔积和内连接的sql语句可以相互转化,这对我们理解内连接的本质和笛卡尔积的查询条件很重要

内连接也可以得到2.3笛卡尔积的结果

SQL 中的笛卡尔积

3.2 笛卡尔积加查询条件

SQL 中的笛卡尔积

转化成内连接查询

SQL 中的笛卡尔积

总结
从结果上来看:内连接不加关联条件的结果就是笛卡尔积
从执行效率和底层实现来看,内连接和笛卡尔积有区别,内连接会先通过on条件过滤两张表的数据,再取交集;笛卡尔积会先将两个表取乘积再过滤数据,所以理论上内连接效率更高
笛卡尔积在表数据量大的情况下查询结果会倍增,实际应用中要加查询条件过滤数据
怎么理解笛卡尔积中的查询条件,可以将笛卡尔积sql转化成内连接sql去理解

到此这篇关于SQL 中的笛卡尔积的文章就介绍到这了,更多相关内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文地址:https://blog.csdn.net/weixin_43078114/article/details/128131481

延伸 · 阅读

精彩推荐