表的自身连接原理详解

以问题驱动的方式来讲解

create table stu
(
	sno char(10) not null,
	sname char(20) not null,
	cname char(20) not null,
	score decimal(3,1) not null
);
insert into stu values('001','王军','计网',70.0);
insert into stu values('001','王军','算法',70.0);
insert into stu values('002','李伟','计网',80.9);
insert into stu values('002','李伟','算法',59.0);
insert into stu values('003','刘辉','计网',56.0);
insert into stu values('003','刘辉','算法',56.0);

查询成绩表中存在不及格课程的学生姓名,所有课程名和成绩信息

刚开始上来就敲了这个

select sname,cname,score
from stu
where score<60;


只显示成绩小于60的课程,不是所有课程,这时就用到表的自身连接了

select *
from stu as s1,stu as s2
where s1.sno=s2.sno;

表的自身连接就是产生2个表的笛卡尔积

select s1.sname,s1.cname,s1.score
from stu as s1,stu as s2
where s1.sno=s2.sno
and s2.score<60
order by s1.sname;


就是上图最后6行的数据

有重复的语句所以要去重

select distinct s1.sname,s1.cname,s1.score
from stu as s1,stu as s2
where s1.sno=s2.sno
and s2.score<60
order by s1.sname;

完成


再来个例子,具体的原理就不讲了

查询每一门课的先修课的先修课

course表有2列con(课程号),cpno(先修课程号)

select first.cno,second.cpno
from course first,course second
where first.cpno=second.cno

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java识堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值