当前位置:主页 > 查看内容

2021-04-05

发布时间:2021-05-07 00:00| 位朋友查看

简介:数据查询-例3.48—3.54 本节课主要学习了数据查询中的连接查询。 例3.48 查询 平均成绩 大于等于90分的学生学号和平均成绩。 select Sno , avg ( Grade ) from SC group by Sno having avg ( Grade ) 80 ; 这里使用了having短语主要原因是where子句不支持使……

数据查询-例3.48—3.54

本节课主要学习了数据查询中的连接查询。
例3.48查询平均成绩大于等于90分的学生学号和平均成绩。

select Sno,avg(Grade)
from SC
group by Sno
having avg(Grade)>80;

这里使用了having短语,主要原因是where子句不支持使用聚合函数作为条件表达式。
在这里插入图片描述
在这里插入图片描述
(平均值我使用的是80)

连接查询

1.等值于非等值连接查询
例3.49
查询每个学生及其选修课程的情况。
没有等值连接的情况下:

select Student.*,SC.Cno
from Student,SC;

在这里插入图片描述
显然这不是正确结果,而是这两个表的笛卡尔积。如果规定了他们的公共属性Sno,结果就是正确的了。

select Student.*,SC.Cno
from Student,SC
where Student.Sno=SC.Sno;

在这里插入图片描述
例3.50对例3.49用自然连接完成。

select Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
from Student,SC
where Student.Sno=SC.Sno;

在这里插入图片描述
如果属性名在参加连接的个表中是唯一的,则可以省略表名前缀,结果是一样的。(例3.49中的SC.Cno改为SC.*后结果一致)

例3.51查询选修2号课程成绩在80分以上的所有学生的学号和姓名。

select SC.Sno,Sname
from SC,Student
where Grade>80 and SC.Cno='2' and SC.Sno=Student.Sno;

在这里插入图片描述
自身连接

例3.52 查询每一门课程的间接先修课(即先修课的先修课)。
课程都在Course表中,但是表中没有直接提到间接先修课,不过如果将表自身和自身连接,就可以找出间接先修课。
我们可以将Course取两个别名,一个first,一个second。

	select first.Cno,second.Cpno
from Course first,Course second
where first.Cpno=second.Cno;

在这里插入图片描述
外连接
有时想以Student表为主体列出每个学生的基本情况及其选课结果。若每个学生没有选课,仍把Student的悬浮元组保存在结果关系中,就需要用到外连接了。
例3.53改写例3.49
如果:

select Student.*,Cno,Grade
from Student,SC
where Student.Sno=SC.Sno

那么不会显示没选课的同学的信息:
在这里插入图片描述
使用外连接:

--左外连接
select Sname,Student.Sno,Ssex,Sage,Sdept,Cno,Grade
from Student left outer join SC on(Student.Sno=SC.Sno);
--右外连接
select Sname,Student.Sno,Ssex,Sage,Sdept,Cno,Grade
from Student right outer join SC on(Student.Sno=SC.Sno);

结果为:
在这里插入图片描述
不同点:左外连接列出左边关系(Student)中的所有元组,右外连接列出右边关系(SC)中的所有元组。

多表连接
连接操作还可以进行两个以上的表进行连接。
例3.54 查询每个学生的学号、姓名、选修的课程名以及成绩。

select Sname,Grade,Cname,Student.Sno
from Student,SC,Course
where Student.Sno=SC.Sno and SC.Cno=Course.Cno;

在这里插入图片描述
注意相同属性的对应关系,不要漏掉。

;原文链接:https://blog.csdn.net/qq_45993036/article/details/115438869
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐