CREATE TABLE [学生] (
[学生ID] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[姓名] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[性别] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[班级ID] [int] NULL ,
CONSTRAINT [PK_学生] PRIMARY KEY  CLUSTERED 
( [学生ID] )  ON [PRIMARY] 
) ON [PRIMARY]
CREATE TABLE [班级] (
[班级ID] [int] NOT NULL ,
[班级姓名] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[所属院系] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[人数] [int] NULL ,
CONSTRAINT [PK_班级] PRIMARY KEY  CLUSTERED 
( [班级ID] )  ON [PRIMARY] 
) ON [PRIMARY]
CREATE TABLE [课程表] (
[课程ID] [int] NOT NULL ,
[课程名称] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[任课老师] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
CONSTRAINT [PK_课程表] PRIMARY KEY  CLUSTERED 
( [课程ID] )  ON [PRIMARY] 
) ON [PRIMARY]
CREATE TABLE [成绩] (
        PRIMARY KEY(学生ID, 课程ID),
[学生ID] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[课程ID] [int] NOT NULL ,
[成绩] [int] NULL ,
        CONSTRAINT fk1 FOREIGN KEY (学生ID) REFERENCES
        学生(学生ID),
        CONSTRAINT fk2 FOREIGN KEY (课程ID) REFERENCES 课程表(课程ID)
)
A:学生表
insert into 学生(学生ID,姓名,性别,班级ID) values(1,'张三','男',1)
insert into 学生(学生ID,姓名,性别,班级ID) values(2,'王五','女',1)
insert into 学生(学生ID,姓名,性别,班级ID) values(3,'李六','男',2)
insert into 学生(学生ID,姓名,性别,班级ID) values(4,'周七','女',2)
B: 班级表
insert into 班级(班级ID,班级姓名,所属院系,人数) values(1,'计算机01','计算机系',28)
insert into 班级(班级ID,班级姓名,所属院系,人数) values(2,'计算机012','计算机系',21)
C: 课程表
insert into 课程表(课程ID,课程名称,任课老师) values(1,'SQL数据库','高老师')
insert into 课程表(课程ID,课程名称,任课老师) values(2,'网络基础','彭老师')
D:成绩表
insert into 成绩(学生ID,课程ID,成绩) values(1,1,90)
insert into 成绩(学生ID,课程ID,成绩) values(1,2,85)问题:
(1)打印数学成绩第10名到第15名的学生成绩单?
(2)写出存储过程,根据课程名和学生姓名查找成绩。??

解决方案 »

  1.   

    select * from
    (select top 6 * from 
    (select top 15 b.姓名,a.成绩 from 成绩 a,学生 b,课程表 c where a.学生id=b.学生id and a.课程id=c.课程id /*and c.课程名称='数学'*/ order by a.成绩 desc) xx
    order by 成绩) vv order by 成绩 desc
    -------------------------------------------------------
    create proc pro_aa(@课程名 varchar(10),@学生姓名 varchar(10),@成绩 int output) as
    select @成绩=a.成绩 from 成绩 a,学生 b,课程表 c where a.学生id=b.学生id and a.课程id=c.课程id and c.课程名称=@课程名 and b.姓名=@学生姓名
    -------------------------------------------------------
    declare @a int
    exec pro_aa '网络基础','张三',@a output
    select @a
      

  2.   

    感谢支持,我写出来。不过不很正确。分数已经给出,望查收
    数学成绩第10名到第15名的学生成绩单。(我只实现了前15名)
    SELECT TOP 15 学生ID,课程ID,成绩
    FROM   成绩
    WHERE 成绩>60 
    order   by 成绩   desc
    -----存储过程可能存在一点问题---------
    Create PROC  P_TEST   @学生姓名 char(10), @课程名称 char(10)
    As
    Select
    课程表.课程名称,
    学生.学生姓名,
    成绩.成绩
    From  成绩 INNER Join  学生   ON 学生.学生ID=成绩.学生ID
                     Join  课程表 ON 课程表.课程ID=成绩.课程ID
    WHERE   学生姓名= @学生姓名
        AND 课程名称 =@课程名称
    GO