数据库面试题
小生对数据库操作不熟悉,问一下各位大神哈:
有四个表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.教师姓名='王军')