create table UserInfo--学生表
(
    Id int primary key identity(1,1) not null,
    UserName varchar(50) not null,
    ClassId  int not null--班级ID,对应ClassInfo的ID
)
GO
create table ClassInfo--班级表
(
    Id int primary key identity(1,1) not null,
    ClassName varchar(50) not null
)
GO
create table SubjectInfo--考试科目表
(
    Id int primary key identity(1,1) not null,
    SubjectName varchar(50) not null
)
GO
create table ExamInfo--考试信息表
(
    Id int primary key identity(1,1) not null,
    Uid int not null,--学生ID,对应UserInfo的Id
    Sid int not null,--科目ID,对应SubjectInfo的Id,
    ExamDate datetime not null--考试时间
)
有很多字段都省略了,只写出了主要的问题1: 查询所有没有参加考试的学生、学生班级及对应科目
问题2: 根据科目ID查询出所有没有参加该科目考试的学生及学生班级
问题3: 根据班级ID查询出该班级所有没有参加考试的学生及科目
要求:以上全部用存储过程实现,并要分页我实在写不出来,大家帮帮忙

解决方案 »

  1.   

    问题1: 查询所有没有参加考试的学生、学生班级及对应科目
    select u.*,s.*
    from UserInfo u,SubjectInfo s
    where not exists (select * from ExamInfo where Uid=u.Uid and Sid=s.Sid)分页你就自己用 top 来吧。
      

  2.   

    where 后面是不是应该加个字段哟?
      

  3.   

    没必要用存储过程吧!分页前面加一个top就可以了。
    表subjectinfo应该还要添加一个classid字段,因为不同班级所学的科目可能不同。
    第一题:select ui.username,ci.classname,si.subjectname
    from userinfo ui,classinfo ci,subjectinfo si,examinfo ei
    where ui.classid=ci.id and ei.sid=si.id
    and ui.id not in
    (select uid from examinfo where sid=si.id);第二题:select ui.username,ci.classname
    from userinfo ui,classinfo ci
    where ui.classid=ci.id and
    not exists
    (select 1 from examinfo
    where sid=1 and uid=ui.id);第三题:select ui.username,si.subjectname
    from userinfo ui,subjectinfo si
    where ui.classid=1 and not exists
    (select 1 from classinfo ci,examinfo ei
    where ui.classid=ci.id and ui.id=ei.uid
    and si.id=ei.sid);