笛卡尔积现象
作者:互联网
笛卡尔积现象:当进行多张表联合查询的时候,在没有任何条件进行限制情况下,最终查询结果条数是多张表记录条数的乘积!
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次!
标签:comment,班级,varchar,cid,笛卡尔,现象,null 来源: https://blog.csdn.net/weixin_43808717/article/details/117478975