日期:2014-05-17  浏览次数:20434 次

数据库面试题
小生对数据库操作不熟悉,问一下各位大神哈:
有四个表Student表,Course表,Score表,Teacher表:
Student(学号,姓名,年龄,性别)学生表
Course(课程代码,课程名称,教师编号)课程表
Score(学号,课程代码,成绩)成绩表
Teacher(教师编号,教师姓名)教师表
1.查询”英语“课程比”数学“课程成绩高的所有学生学号
2.查询平均成绩大于60分的同学的学号,姓名和平均成绩:
3.查询所有同学的学号、姓名、选课数、总成绩
4.查询没学过“王军”老师课的同学的学号,姓名: 
这四个问题SQL语句应该怎么写?不要百度上的那个哈

------解决方案--------------------
这种程度建议自己做,思路:四表关联,然后做筛选
------解决方案--------------------
http://bbs.csdn.net/topics/340046949

看了这个就差不多了
------解决方案--------------------

--1.
select 学号
from 
(
select s.学号,

       case when max(case when c.课程名称 = '英语' then s.成绩 else 0 end) >
                 max(case when c.课程名称 = '数学' then s.成绩 else 0 end)
                 then 1
            else 0
       end as flag
from score s
inner join Course c
        on s.课程代码 = c.课程代码
where c.课程名称 in ('英语','数学') 
group by s.学号   
)a
where a.flag = 1


--2.
select st.学号,
       st.姓名,
       avg(成绩) as 平均成绩
from score s
inner join Student st
        on s.学号 = st.学号
group by st.学号,
         st.姓名
having avg(成绩) > 60


--3.
select st.学号,
       st.姓名,
       count(*) as 选课数,
       sum(成绩) as 总成绩
from score s
inner join Student st
        on s.学号 = st.学号
group by st.学号,
         st.姓名


--4.
select st.学号,
       st.姓名
from Student st
where not exists(select 1 
                 from score s
                 inner join Course c
                         on c.课程代码 = s.课程代码
                 inner join Teacher t
          &nbs