日期:2014-05-18  浏览次数:20523 次

sql的一个高级查询问题
create table student(
 sno char(10) primary key, --学号
 sname nvarchar(20), --姓名
 ssex bit, --性别
 birthdate smalldatetime, --出生日期
 sdept varchar(10) --所属院系
)
create table course
( cno char(6) primary key, --课程号
  cname nvarchar(20), --课程名
  ccredit int, --学分
  pcno char(6) --先行课课程号
)
create table sc
(
  sno char(10), --学号
  cno char(6), --课程号
  grade int, --课程成绩
  primary key (sno,cno)
这个是3张表
问题-查询各门课程的最高分的的学生情况,要求列出学号、姓名、课程号、课程名、该课程的最高分的成绩
怎么实现这个呢 我想了好长时间 不晓得如何实现

------解决方案--------------------
这样理解:
SQL code
--先是三表连接查询,这没什么复杂的,最正常的三表连接:
select a.sno,a.sname,c.cno,c.cname,b.grade
from student a inner join sc b on a.sno=b.sno 
inner join course c on c.cno=b.cno
--条件:因为要找的是该课程的最高分,因此,条件是:
--不存在这样一种情况,即sc表中没有cno与当前连接查询中的那个cno相同,
--且成绩大于当前查询那条记录的成绩的
where not exists(select 1 from sc where cno=b.cno and grade>b.grade)