经典SQL面试题(转)

http://www.cnblogs.com/kcher90/archive/2013/03/13/2957932.html

有三个表,如果学生缺考,那么在成绩表中就不存在这个学生的这门课程成绩的记录,写一段SQL语句,检索出每个学生缺考的科目。
A 学生表(student)
字段1 学生号(s_id)
字段2 学生名(s_name)

B 科目表(course)
字段1 科目号(c_id)
字段2 科目名(c_name)

C 成绩表(grade)
字段1 成绩号(g_id)
字段2 学生号(s_id)
字段3 科目号(c_id)
字段4 成绩(score)

 

select * from student join course left join grade on student.s_id=grade.s_id and course.c_id=grade.c_id where grade.score is null;

 

2.有如下表

日期(rstime)结果(result)
2005-05-09
2005-05-09
2005-05-09
2005-05-09
2005-05-10
2005-05-10
2005-05-10

如果要生成下列结果,该如何写sql语句?

日期
2005-05-0922
2005-05-101

2

 

select rstime,sum(case result when '' then 1 else 0 end)as 胜,
sum(case result when '' then 1 else 0 end)asfrom result group by rstime;

3.用一条SQL语句,查询出成绩表(grade)每门课都大于80分的学生姓名

 

namecoursescore
张三语文81
张三数学75
李四语文76
李四数学90
王五语文81
王五数学100
王五英语90

 

select distinct name from grade  where  name not in (select distinct name from grade where score<=80)


1.原表:

 

courseidcoursenamescore
1java70
2oracle90
3xml40
4jsp30
5servlet80

为了方便阅读,查询此表后的显示结果如下(及格分数为60分):

courseidcoursenamescoremark
1java70pass
2oracle90pass
3xml40fail
4jsp30fail
5servlet80pass

 

select *,case when score>=60 then 'pass' else 'fail' end as 'mark' from temp;

5.学生表(stu),如下:

 

自动编号学号姓名课程编号课程名称分数
12005001张三0001  数学69
22005002李四0001  数学89
32005001张三0001  数学

69

删除除了自动编号不同,其他字段都相同的学生冗余信息。

create table temp as select 自动编号 from stu group by 学号,姓名,课程编号,课程名称,分数;
delete from stu where 自动编号 not in (select 自动编号 from temp);

--其实也可以这样的--
delete from stu where id not in
(select max(id) from stu group  by no,course,fenshu )

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值