Student(S#,Sname,Sage,Ssex) 学生表
 Course(C#,Cname,T#) 课程表
 SC(S#,C#,score) 成绩表
 Teacher(T#,Tname) 教师表 
 问题:
 1、查询“001”课程比“002”课程成绩高的所有学生的学号;
 select 	a.S#
 from (select s#,score from SC where C#=’001′) a,
 	(select s#,score from SC where C#=’002′) b
 where 	a.score>b.score and a.s#=b.s#; 
 2、查询平均成绩大于60分的同学的学号和平均成绩;
 select S#,avg(score)
 from sc
 group by S# having avg(score) >60; 
 3、查询所有同学的学号、姓名、选课数、总成绩;
 select Student.S#,Student.Sname,count(SC.C#),sum(score)
 from Student left Outer join SC on Student.S#=SC.S#
 group by Student.S#,Sname 
 4、查询姓“李”的老师的个数;
 select count(distinct(Tname))
 from Teacher
 where Tname like ‘李%’; 
 5、查询没学过“叶平”老师课的同学的学号、姓名;
 select Student.S#,Student.Sname
 from Student
 where S# not in (select distinct( SC.S#) from SC,Course,Teacher where   SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname=’叶平’); 
 6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;
 select Student.S#,Student.Sname
 from Student,SC
 where Student.S#=SC.S# and SC.C#=’001′and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#=’002′);
 7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;
 select S#,Sname
 from Student
 where S# in
 	(select S#
 	from SC ,Course ,Teacher
 	where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname=’叶平’  group by S# having count(SC.C#)=(select count(C#) from Course,Teacher   where Teacher.T#=Course.T# and Tname=’叶平’)); 
 8、查询所有课程成绩小于60分的同学的学号、姓名;
 select S#,Sname
 from Student
 where S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60); 
 9、查询没有学全所有课的同学的学号、姓名;
 select Student.S#,Student.Sname
 from Student,SC
 where Student.S#=SC.S#
 group by  Student.S#,Student.Sname having count(C#) <(select count(C#) from Course); 
 10、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;
 select S#,Sname
 from Student,SC
 where Student.S#=SC.S# and C# in (select C# from SC where S#='1001');
 11、删除学习“叶平”老师课的SC表记录;
 Delect SC
 from course ,Teacher
 where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='叶平'; 
 12、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分
 SELECT L.C# 课程ID,L.score 最高分,R.score 最低分
 FROM SC L ,SC R
 WHERE L.C# = R.C#
 and
 L.score = (SELECT MAX(IL.score)
      FROM SC IL,Student  IM
      WHERE IL.C# = L.C# and IM.S#=IL.S#
      GROUP BY IL.C#)
 and
 R.Score = (SELECT MIN(IR.score)
     FROM SC  IR
     WHERE IR.C# = R.C#
 GROUP BY IR.C#  ); 
 13、查询学生平均成绩及其名次
 SELECT 1+(SELECT COUNT( distinct 平均成绩)
     FROM (SELECT S#,AVG(score) 平均成绩
       	FROM SC
           GROUP BY S# ) T1
     WHERE 平均成绩 > T2.平均成绩) 名次, S# 学生学号,平均成绩
 FROM (SELECT S#,AVG(score) 平均成绩 FROM SC GROUP BY S# ) T2
 ORDER BY 平均成绩 desc;
 14、查询各科成绩前三名的记录:(不考虑成绩并列情况)
 SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数
 FROM SC t1
 WHERE score IN (SELECT TOP 3 score
            FROM SC
            WHERE t1.C#= C#
            ORDER BY score DESC)
 ORDER BY t1.C#; 
 15、查询每门功成绩最好的前两名
 SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数
 FROM SC t1
 WHERE score IN (SELECT TOP 2 score
           FROM SC
           WHERE t1.C#= C#
           ORDER BY score DESC )
 ORDER BY t1.C#;
 补充:
 已经知道原表
 year salary
 ——————
 2000 1000
 2001 2000
 2002 3000
 2003 4000
 解:
 select b.year,sum(a.salary)
 from salary a,salary b
 where a.year<=b.year
 group by b.year
 order by b.year;
 在面试过程中多次碰到一道SQL查询的题目,查询A(ID,Name)表中第31至40条记录,ID作为主键可能是不是连续增长的列,完整的查询语句如下:
 方法一:
 select  top 10 *
 from A
 where ID >(select max(ID) from (select  top 30 ID from A order by ID ) T) order by ID
 方法二:
 select top 10 *
 from  A
 where ID not In (select top 30 ID from A order by ID)
 order by ID