当前位置: 代码迷 >> Sql Server >> 数据库面试题,该如何解决
  详细解决方案

数据库面试题,该如何解决

热度:8   发布时间:2016-04-24 20:12:30.0
数据库面试题
小生对数据库操作不熟悉,问一下各位大神哈:
有四个表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
                         on t.教师编号 = c.教师编号
                 where st.学号 = s.学号 and t.教师姓名 = '王军')

------解决方案--------------------

--1.查询”英语“课程比”数学“课程成绩高的所有学生学号
select x.学号 from
(select a.学号,b.成绩
 from Student a
 inner join Score b on a.学号=b.学号
 inner join Course c on b.课程代码=c.课程代码
 where c.课程名称='英语') x
inner join
(select a.学号,b.成绩
 from Student a
 inner join Score b on a.学号=b.学号
 inner join Course c on b.课程代码=c.课程代码
 where c.课程名称='数学') y on x.学号=y.学号
where x.成绩>y.成绩


--2.查询平均成绩大于60分的同学的学号,姓名和平均成绩:
select a.学号,a.姓名,avg(b.成绩) '平均成绩'
 from Student a
 inner join Score b on a.学号=b.学号
 group by a.学号,a.姓名
 having avg(b.成绩)>60


--3.查询所有同学的学号、姓名、选课数、总成绩
select a.学号,a.姓名,count(1) '选课数',sum(b.成绩) '总成绩'
 from Student a
 inner join Score b on a.学号=b.学号
 group by a.学号,a.姓名


--4.查询没学过“王军”老师课的同学的学号,姓名: 
select a.学号,a.姓名
 from Student a
 inner join Score b on a.学号=b.学号
 where b.课程代码 in
 (select a.课程代码
  from Course a
  inner join Teacher b on a.教师编号=b.教师编号
  where b.教师姓名='王军')
  相关解决方案