2、查询“生物”课程比“物理”课程成绩高的所有学生的学号;
SELECT C.student_id, C.SHENGWU, D.WULI FROM ( SELECT A.student_id, A.number AS SHENGWU FROM socke A LEFT JOIN corse B ON A.corse_id = B.cid WHERE B.cname = '生物' ) AS C LEFT JOIN ( SELECT socke.student_id, socke.number AS WULI FROM socke LEFT JOIN corse ON socke.corse_id = corse.cid WHERE corse.cname = '物理' ) AS D ON C.student_id = D.student_id WHERE shengwu>=wuli #SHENGWU >= IF(ISNULL(WULI),0,WULI);查看源码
3、查询平均成绩大于60分的同学的学号和平均成绩;
SELECT student_id,AVG(number) from socke GROUP BY student_id HAVING AVG(number)>60 ; SELECT student_id,AVG(number) as PJ from socke GROUP BY student_id HAVING PJ>60 ORDER BY PJ DESC;查看源码
4、查询所有同学的学号、姓名、选课数、总成绩;
SELECT socke.student_id,student.sname,COUNT(1),SUM(socke.number) FROM socke LEFT JOIN student on socke.student_id=student.sid GROUP BY socke.student_id; SELECT socke.student_id,student.sname,COUNT(1),SUM(socke.number) FROM socke LEFT JOIN student on socke.student_id=student.sid GROUP BY socke.student_id ORDER BY SUM(socke.number);查看源码
5、查询姓“李”的老师的个数;
SELECT COUNT(1) from teacher WHERE tname LIKE '李%';查看源码
6、查询没学过“李平”老师课的同学的学号、姓名;
SELECT student_id, sname FROM socke LEFT JOIN student ON socke.student_id = student.sid WHERE socke.student_id NOT IN (SELECT socke.student_id FROM socke WHERE socke.corse_id IN ( SELECT corse.cid FROM corse WHERE corse.teacher_id IN ( SELECT teacher.tid FROM teacher WHERE teacher.tname = '李平老师') ) GROUP BY socke.student_id)查看源码
select * from student where sid not in ( select DISTINCT student_id from score where score.course_id in ( select cid from course left join teacher on course.teacher_id = teacher.tid where tname = '李平老师' ) )查看源码
7、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;
SELECT student.sname, score.student_id FROM score LEFT JOIN student ON score.course_id = student.sid WHERE score.course_id = 1 OR score.course_id = 2 GROUP BY score.student_id HAVING COUNT(1) > 1;查看源码
8、查询学过“叶平”老师所教的所有课的同学的学号、姓名;
SELECT * FROM score where course_id in (SELECT cid from course LEFT JOIN teacher on course.teacher_id=teacher.tid WHERE teacher.tname='李平老师') GROUP BY student_id HAVING COUNT(1)=(SELECT COUNT(cid) from course LEFT JOIN teacher on course.teacher_id=teacher.tid WHERE teacher.tname='李平老师');查看源码
9、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;
SELECT a.student_id,a.sname FROM (SELECT score.sid,score.student_id,score.num,student.sname from score LEFT JOIN student on score.student_id= student.sid WHERE course_id=2)as A LEFT JOIN (SELECT score.sid,score.student_id,score.num,student.sname from score LEFT JOIN student on score.student_id= student.sid WHERE course_id=1)as B on A.student_id=b.student_id WHERE a.num>b.num;查看源码
10、查询有课程成绩小于60分的同学的学号、姓名;
SELECT DISTINCT(score.student_id),student.sname from score LEFT JOIN student on score.student_id=student.sid WHERE score.num<60;查看源码
11、查询没有学全所有课的同学的学号、姓名;
SELECT score.student_id,student.sname FROM score LEFT JOIN student on score.student_id=student.sid GROUP BY score.student_id HAVING COUNT(1)<(SELECT COUNT(1) from course);查看源码
12、查询至少有一门课与学号为“001”的同学所学相同的同学的学号和姓名;
SELECT DISTINCT(score.student_id),student.sname from score LEFT JOIN student on score.student_id=student.sid where score.course_id in (SELECT score.course_id from score WHERE score.student_id=1) and score.student_id!=1;查看源码 查看源码
13、查询至少学过学号为“001”同学所有课的其他同学学号和姓名;
SELECT student.sname, student_id, COUNT(1) FROM score LEFT JOIN student on score.student_id= student.sid WHERE student_id != 1 AND course_id IN ( SELECT course_id FROM score WHERE score.student_id = 1) GROUP BY student_id HAVING COUNT(1) = 3;查看代码
14、查询和“002”号的同学学习的课程完全相同的其他同学学号和姓名;
SELECT student_id,COUNT(1) from score where student_id in (SELECT student_id from score where student_id!=2 and course_id in(SELECT course_id from score WHERE student_id=2) GROUP BY student_id HAVING COUNT(1)=(SELECT COUNT(1) from score where student_id=2 GROUP BY student_id) ) GROUP BY student_id HAVING COUNT(1)=(SELECT COUNT(1) from score where student_id=2 GROUP BY student_id);查看源码
15、删除学习“叶平”老师课的score表记录;
delete from score where course_id in ( select cid from course left join teacher on course.teacher_id = teacher.tid where teacher.name = '叶平' )查看源码
16、向SC表中插入一些记录,这些记录要求符合以下条件:①没有上过编号“002”课程的同学学号;②插入“002”号课程的平均成绩;
由于
insert
支持
inset
into
tb1(xx,xx)
select
x1,x2
from
tb2;
insert into score(student_id, course_id, num) select sid,2,(select avg(num) from score where course_id = 2) from student where sid not in ( select student_id from score where course_id = 2 )查看源码
17、按平均成绩从低到高 显示所有学生的“语文”、“数学”、“英语”三门的课程成绩,按如下形式显示: 学生ID,语文,数学,英语,有效课程数,有效平均分;
select sc.student_id, (SELECT num from score LEFT JOIN course on score.course_id=course.cid where course.cname='生物' and score.student_id=sc.student_id)as sy, (SELECT num from score LEFT JOIN course on score.course_id=course.cid where course.cname='物理' and score.student_id=sc.student_id)as wl, (SELECT num from score LEFT JOIN course on score.course_id=course.cid where course.cname='体育' and score.student_id=sc.student_id)as ty, COUNT(1) ,avg(num)as PJ from score as sc GROUP BY student_id ORDER BY pj asc;查看源码
18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分;
SELECT course_id,MAX(num)as max_num ,MIN(num) as min_num from score GROUP BY course_id查看源码
19、按各科平均成绩从低到高和及格率的百分数从高到低顺序;
思路:
case
when
..
then
SELECT course_id,sum(case when score.num>60 then 1 else 0 END)/COUNT(1)*100 from score GROUP BY course_id
SELECT course_id,avg(num)as avg_num,sum(case when score.num>60 then 1 else 0 END)/COUNT(1)*100 as percent from score GROUP BY course_id ORDER BY avg_num desc,percent asc查看源码
20、课程平均分从高到低显示(现实任课老师);
SELECT avg(if(ISNULL(score.num),0,score.num))as percent ,teacher.tname,score.course_id from course LEFT JOIN teacher on course.teacher_id=teacher.tid LEFT JOIN score on score.course_id=course.cid GROUP BY score.course_id ORDER BY percent desc;查看源码
21、查询各科成绩前三名的记录:(不考虑成绩并列情况);
SELECT score.sid,score.course_id,score.num,t.first_num,t.second_num from score LEFT JOIN (SELECT sid,course_id,(SELECT num from score as s1 where s1.course_id = s2.course_id ORDER BY num desc limit 0,1) as first_num, (SELECT num from score as s1 where s1.course_id = s2.course_id ORDER BY num desc limit 3,1) as second_num from score as s2)as t on score.sid=t.sid where score.num<= t.first_num and score.num>= t.second_num查看源码
22、查询每门课程被选修的学生数;
SELECT course_id,COUNT(1) from score GROUP BY course_id
23、查询出只选修了一门课程的全部学生的学号和姓名;
SELECT score.student_id,student.sname from score LEFT JOIN student on score.student_id=student.sid GROUP BY student_id HAVING COUNT(1)=1查看源码
24、查询男生、女生的人数;
select * from (select count(1) as man from student where gender='男') as A , (select count(1) as feman from student where gender='女') as B查看源码
25、查询姓“张”的学生名单;
select * from student where sname LIKE '张%'查看源码
26、查询同名同姓学生名单,并统计同名人数;
SELECT sname,COUNT(1)as count from student GROUP BY sname查看源码
27、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列;
SELECT course_id ,avg(IF(ISNULL(num),0,num)) as avg_num from score GROUP BY course_id ORDER BY avg_num asc ,course_id DESC
28、查询平均成绩大于85的所有学生的学号、姓名和平均成绩;
SELECT student_id,course_id,COUNT(1), AVG(if(ISNULL(num),0,num))as avg_num from score LEFT JOIN student on score.student_id=student.sid GROUP BY student_id HAVING avg_num>85查看源码
29、查询课程名称为“数学”,且分数低于60的学生姓名和分数;
SELECT student.sname,score.num from score LEFT JOIN course on score.course_id=course.cid LEFT JOIN student on score.student_id=student.sid WHERE course.cname='生物' and score.num<60查看源码
30、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名;
SELECT score.student_id,student.sname,score.num from score LEFT JOIN student on score.student_id=student.sid where score.course_id=3 and score.num>80查看源码
31、求选了课程的学生人数
SELECT count(DISTINCT student_id) from score;
SELECT count(1) from (SELECT COUNT(1) from score GROUP BY student_id)as A;查看源码
32、查询选修“杨艳”老师所授课程的学生中,成绩最高的学生姓名及其成绩;
SELECT student.sname,score.num from score LEFT JOIN course on score.course_id=course.cid LEFT JOIN teacher on course.teacher_id=teacher.tid LEFT JOIN student on score.student_id=student.sid WHERE teacher.tname='张磊老师' ORDER BY num DESC LIMIT 0,1;查看源码
select sname,num from score left join student on score.student_id = student.sid where score.course_id in (select course.cid from course left join teacher on course.teacher_id = teacher.tid where tname='张磊老师') order by num desc limit 1;查看源码
33、查询各个课程及相应的选修人数;
SELECT course.cname,count(1) FROM score LEFT JOIN course on score.course_id=course.cid GROUP BY course_id查看源码
34、查询不同课程但成绩相同的学生的学号、课程号、学生成绩;
select DISTINCT s1.course_id,s2.course_id,s1.num,s2.num from score as s1, score as s2 where s1.num = s2.num and s1.course_id != s2.course_id;查看源码
35、查询每门课程成绩最好的前两名;
select score.sid,score.course_id,score.num,T.first_num,T.second_num from score left join ( select sid, (select num from score as s2 where s2.course_id = s1.course_id order by num desc limit 0,1) as first_num, (select num from score as s2 where s2.course_id = s1.course_id order by num desc limit 1,1) as second_num from score as s1 ) as T on score.sid =T.sid where score.num <= T.first_num and score.num >= T.second_num查看源码
36、检索至少选修两门课程的学生学号;
SELECT student_id from score GROUP BY student_id HAVING COUNT(course_id)>1查看源码
37、查询全部学生都选修的课程的课程号和课程名;
SELECT course_id,course.cname from score LEFT JOIN course on score.course_id=course.cid GROUP BY course_id HAVING COUNT(1)=(SELECT COUNT(1)查看源码
38、查询没学过“叶平”老师讲授的任一门课程的学生姓名;
SELECT * FROM student where sid not in(SELECT DISTINCT student_id from score WHERE score.course_id in (SELECT cid from course LEFT JOIN teacher on course.teacher_id= teacher.tid WHERE teacher.tname='张磊老师'))查看源码
39、查询两门以上不及格课程的同学的学号及其平均成绩;
SELECT student_id,course_id,COUNT(1)as num_1 from score where num<60 GROUP BY student_id HAVING num_1>=2查看源码
40、检索“004”课程分数小于60,按分数降序排列的同学学号;
SELECT student_id,num from score where score.course_id=4 and num<90 ORDER BY num desc查看源码
41、删除“002”同学的“001”课程的成绩;
delete from score where course_id = 1 and student_id = 2