现有三个表,学生表(学生编号,学生名),课程表(课程编号,课程名)和成绩表(学生编号,课程编号,成绩),现显示所有课程修完的学生姓名,课程名及成绩。

解决方案 »

  1.   


     
    select 学生表.学生名,课程表.课程名,成绩表.成绩 from 成绩表 join 学生表 on 成绩表.学生编号=学生表.学生编号 join 课程表 on 成绩表.课程编号=课程表.课程编号 where 成绩表.成绩>=60
      

  2.   

    to: 楼上
    发新帖请在左侧树中选择问题类别,然后点击右上侧"提问".
    ===========================================================================
    SELECT a.学生姓名,b.课程名,MAX(c.成绩) AS 成绩
    FROM 成绩表 as c
    INNER JOIN 课程表 as b ON c.课程编号 = b.课程编号
    INNER JOIN 学生表 as a on c.学生编号 = a.学生编号
    GROUP BY c.学生编号,a.学生姓名,b.课程名
    HAVING count(c.课程编号) = (select count(*) from 课程表)
      

  3.   

    抱歉,更正一下:
    declare @student table(学生编号 int,学生名 varchar(10))
    insert @student
    select 1,'张三' union all
    select 2,'李四' union all
    select 3,'王五' 
    declare @course table(课程编号 int,课程名 varchar(10))
    insert @course
    select 1,'语文' union all
    select 2,'数学' union all
    select 3,'英语' union all
    select 4,'物理' 
    declare @score table(学生编号 int,课程编号 int, 成绩 int)
    insert @score
    select 1,1,80 union all
    select 2,1,80 union all
    select 3,1,80 union all
    select 3,2,80 union all
    select 3,3,80 union all
    select 3,4,80 SELECT a.学生名,b.课程名,c.成绩
    FROM @score as c
    INNER JOIN @course as b ON c.课程编号 = b.课程编号
    INNER JOIN @student as a on c.学生编号 = a.学生编号
    WHERE (select count(课程编号) from @score where 学生编号 = c.学生编号) = (select count(DISTINCT 课程编号) from @course)/*结果
    学生名       课程名       成绩          
    ---------- ---------- ----------- 
    王五         语文         80
    王五         数学         80
    王五         英语         80
    王五         物理         80
    */