学员表 (学号,姓名,单位) 课程表 (课程号,课程名,授课老师)选修表(学号,课程号,成绩)。  1. 找出没有选修过“李明”老师讲授课程的所有学生姓名  2. 列出既学过’C01’号课程,又学过’C02’号课程的所有学生姓名  3. 列出’C01’号课成绩比’C02’号同学该门课成绩高的所有学生的学号  4. 列出’C01’号课成绩比’C02’号课成绩高的所有学生的学号及其’C01’号课和’C02’号课的成绩

解决方案 »

  1.   

    1、select distinct 学号,姓名 from A left join B ON A.学号=B.学号 WHERE 课程号 not in (select 课程号 from C where 授课老师='李明')
    2、select distinct 学号,姓名 from A left join B ON A.学号=B.学号 where B.课程号='C01' OR B.课程号='C02'
    3 and 4、select T1.学号,T2.姓名,成绩1,成绩2  from (select 学号,(case 课程号 when 'C01' then 成绩1 eles 0 end) AS 成绩1,(case 课程号 when 'C02' then 成绩1 eles 0 end) AS 成绩2  from B)T1
    left join A on T1.学号=T2.学号 where T1.成绩1>T1.成绩2
      

  2.   

    1、select distinct A.学号,A.姓名 from 学员表 A,选修表 B where A.学号=B.学号 and 课程号 not in (select 课程号 from 课程表 where 授课老师='李明')
    2、select distinct A.学号,B.姓名 from 学员表 A, 选修表 B where A.学号=B.学号 and 课程号 in('C01','C02')
      

  3.   

    1、select distinct 姓名 from 学员表 A left join 选修表 B ON A.学号=B.学号 WHERE 课程号 not in (select 课程号 from 课程表 where 授课老师='李明')
    2、select distinct 姓名 from 学员表 A where EXISTS (SELECT TOP 1 学号 FROM 选修表 WHERE 学号=A.学号 AND 课程号='C01') AND EXISTS (SELECT TOP 1 学号 FROM 选修表 WHERE 学号=A.学号 AND 课程号='C02')
    3、SELECT 学号 FROM 选修表 WHERE 课程号='C01' AND 成绩>(SELECT MAX(成绩) FROM 选修表 WHERE 课程号='C02')
    4、select A.学号,A.成绩 AS C01成绩,B.成绩 AS C02成绩  from 选修表 A inner join 选修表 B ON A.学号=B.学号 where A.课程号='C01' AND B.课程号='C02' AND A.成绩>B.成绩