笛卡尔积现象

笛卡尔积现象:当进行多张表联合查询的时候,在没有任何条件进行限制情况下,最终查询结果条数是多张表记录条数的乘积!

1、建表
create table `student` (
    `sid` int(15) not null auto_increment comment '学号',
    `sname` varchar(30) not null  comment '姓名',
    `cid` varchar(30) null comment '班号',
    primary key (`sid`)
)engine=innodb default charset=utf8
insert into student(`sname` , `cid`) 
value ('张三', '1'), ('李四', '1'), ('王五', '1'),
       ('赵六', '2'), ('钱七', '2')
create table classroom(
    cid varchar(30) not null comment '班号',
    cname varchar(30) not null comment '班级名',
    primary key(`cid`)
)engine=innodb default charset=utf8;
insert into classroom(`cid`, `cname`) value ('1', '软件工程'), ('2', '网络工程')

在这里插入图片描述


2、笛卡尔积现象分析

现在给定一个查询需要查出学生所在的班级,显示学生名字、班级名字。

select s.sname, c.cname from student s, classroom c;

在这里插入图片描述

  • 这就是笛卡尔积现象,在没有进行条件干预的情况下查询的结果是多张表数据的乘积!

  • 既然是积,那么底层计算的时候可能是就是二重循环。(个人理解)


为了解决上述的问题,需要加上一个where条件,只有当学生表中的的班级号和班级表中的班级号对应才进行显示! 注意这里是显示

select s.sname, c.cname from student s, classroom c where s.cid = c.cid;

在这里插入图片描述

  • 最后答案就是五条记录,但是笛卡尔积并没有解决,笛卡尔积现象解决了!

  • 底层还是可以理解为二重循环,只不过等价于多加了一个if判断条件。因此还是进行了笛卡尔积操作!

  • 这也就是为什么说是显示,因为只有if条件成立才进行输出打印,运算依旧进行了10次!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值