0


第23讲:多表查询之笛卡尔积的概念

文章目录

1.笛卡尔积的概念

笛卡尔是一个科学家,由这个科学家发现了笛卡尔积,在数据库的多表查询中,也有笛卡尔积的概念。

笛卡尔积指的是两个集合所有的组合情况,如下图所示:

A和B相当于两个集合,都需要乘以1、2、3、4,A集合与1、2、3、4有四种组合情况,B集合与1、2、3、4也有四种组合情况,最终就会输出A、B两个集合的所有组合结果。

image-20220517222300670

A和B两个集合就相当于表中的2条数据,1、2、3、4就相当于另外一张表中的四条独立的数据,在数据库中多表查询就类似于笛卡尔积的概念,直接同时查询多张数据表时,显示的数据条数就是两张表数据条数的积。

但是这种显示效果并不是我们理想的状态,我们希望查询的结果是A表有的、B表也有的数据给列出来,其余的不要,实现也很简单,只需要添加上两张表连接的一个条件,即可将多余的数据给剔除。

如下图所属,我们只想要A集合与3组合、B集合与2组合的数据,此时只需要增加上一个连接条件,就可以只显示满足条件的组合数据。

image-20220517222838278

2.演示数据库中笛卡尔积的现象以及如何避免

首先来同时查询人员信息表以及部门数据表的数据。

select*from ryxxb,bmxxb

查询结果如下,结果并不是我们理想中的数据,此时正是应用了笛卡尔积的现象,from后面第一张表面和第二张表同时查询时,将两张表中所有的组合条件结果都列了出来,以至于每个人员对不同的部门都进行了组合,现在就导致了一个问题,我们并不清楚这些数据中哪一个数据才是正确的数据。

image-20220518214701108

解决此问题的方法也很简单,增加一个连接条件,人员信息表的bm_id字段与部门信息表的id字段是由关联性的,因此我们来添加一个连接条件,当人员表的bm_id与部门表的id字段数据一致时,则显示,否则就不显示。

select*from ryxxb,bmxxb where ryxxb.bm_id = bmxxb.id orderby ryxxb.id asc;

查询效果如下,当人员信息表的bm_id字段与部门信息表的id字段内容相等时,才会被查询出来。

标签: 数据库 mysql sql

本文转载自: https://blog.csdn.net/weixin_44953658/article/details/127087480
版权归原作者 Jiangxl~ 所有, 如有侵权,请联系我们删除。

“第23讲:多表查询之笛卡尔积的概念”的评论:

还没有评论