一些简单的sql语句应付面试

我们来演示一个数据库练习题中的HelloWorld表吧

student(#id, name)

course(#id, name)

grade(#sid, #cid, grade)

1. 查出选修的所有课程的学生姓名

select name from grade, student where grade.sid = student.id group by sid having count(distinct cid) = (select count(distinct id) from course);

2. 查询选修了 数学的 学生姓名

select name from grade, student where grade.sid = student.id and cid in (select id from course where name like '数学');

或者

扫描二维码关注公众号,回复: 1255528 查看本文章

select name from student where id in (select sid from grade, course where course.id = grade.cid and course.name like '数学');

3. 查询了至少选修了一门课的学生的姓名

select name from student, grade where student.id = grade.sid group by sid having count(distinct cid)>0;

4.查询不选修课程号为’5‘的学生姓名

select name from student where id not in (select distinct sid from grade where cid = '5');

5.查询了选修的课程的学生人数

select count(distinct sid) as '学员人数' from grade;

6.查询选修了5门及以上课程的学生姓名

select name from student, grade where student.id = grade.sid group by sid having count(distinct cid) >= 5;

7.查询2门以上不合格成绩及以上的学生姓名和平均成绩

select name, avg(grade) as '平均成绩', sum(grade<60) as '不及格门数' from student, grade where student.id = grade.sid group by sid having sum(grade<60)>=2;

8.查询既选修了1,又选修了2课程的学生姓名

select name from student, grade where student.id = grade.sid group by sid having sum(case when (cid=1 or cid=2) then 1 else 0 end)=2; 

或者

select name from grade, student where grade.sid = student.id and cid in ('1', '2') group by sid having count(distinct cid) = 2;

猜你喜欢

转载自201307121509.iteye.com/blog/1974946
今日推荐