MySQL:透析多表查询里面的广义笛卡积~~~~~

本文介绍了数据库的创建与数据插入,通过实例展示了如何在MySQL中建立并填充两个数据表。接着,解释了在多表查询中使用前缀来避免字段名冲突,并详细解析了`BETWEEN`和`IN`运算符在SQL查询中的应用。同时,以笛卡尔积的概念帮助理解多表查询结果的形成过程。
摘要由CSDN通过智能技术生成

<1>先建立两个数据表结构→→→ 

mysql> create table school1(
    -> id int PRIMARY key,
    -> name varchar(50),
    -> achievement int);//建立第一个数据表

mysql> insert into school1 values
    -> (1,'老刘',98),
    -> (2,'老王',97),
    -> (3,'老周',96);//给第一个数据表添加数据

mysql> create table school1(
    -> id int PRIMARY key,
    -> name varchar(50),
    -> achievement int);//建立第二个数据表

mysql> insert into school1 values
    -> (1,'老刘',98),
    -> (2,'老王',97),
    -> (3,'老周',96);//给第二个数据表添加数据

两数据表如图所示→→→ 

 <2>执行多表查询命名语句后,结果如图所示→→→ 

 首先我们看每个字段前都加了前缀,那么为什么要加前缀呢?因为在不同的数据表中,可能存在名字相同的字段名,所以我们要在字段前面添加各自对应的表名进行区分(单表查询里面我们忽略了前缀,因为同一张表内,字段名肯定是互不相同的)。

另外我们再来看看两条SQL命令语句→→→ 

97 between s.achievement and c.achievement;

利用了expr1 between expr2 and expr3  运算符。意思就是选出s.achievement字段小于等于97的记录以及c.achievement字段大于等于97的记录

 s.achievement in(95,98,99,97) and c.achievement in(95,96);

利用了expr1 in(expr2,expr3,expr4……)和and运算符。意思就是选出等于in括号里面出现过的值(在这里是95,98,99,97)的s.achievement字段所对应的那条记录,以及等于in括号里面出现过的值(在这里是95,96)的c.achievement字段所对应的那条记录。and是 “&&”的意思(与)。

介绍完这些后,我们来看看广义笛卡尔积是怎么定义的:假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}  笛卡尔积就是求一个排列组合,两个集合的元素都配对一次。

接下来我们用笛卡尔积的数学思维来看我们多表查询出来的结果图→→→ 

 

 仔细观察后,不就是把两个表选出来的所有记录分别组合成两个集合,然后对这两个集合进行一次笛卡尔积,最后再把结果用图的方式显示出来吗?

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值