时间:2021-07-01 10:21:17 帮助过:3人阅读
-- 2、查询“生物”课程比“物理”课程成绩高的所有学生的学号;
-- SELECT * from
-- (SELECT student_id,num as sw from student LEFT JOIN score on student.sid=score.student_id and score.course_id=1) as t1
-- LEFT JOIN
-- (SELECT student_id,num as wl from student LEFT JOIN score on student.sid=score.student_id and score.course_id=2) as t2
-- on t1.student_id=t2.student_id where sw>IF(ISNULL(wl),0,wl)
--
-- 3、查询平均成绩大于60分的同学的学号和平均成绩;
-- SELECT student_id,AVG(num) from score GROUP BY student_id HAVING AVG(num)>60
-- 4、查询所有同学的学号、姓名、选课数、总成绩;
-- SELECT student_id,sname,COUNT(course_id),SUM(num) from student LEFT JOIN score on student.sid=score.student_id GROUP BY student_id,sname
-- 5、查询姓“李”的老师的个数;
-- SELECT COUNT(*) from teacher where tname like ‘李%‘
-- 6、查询没学过“李平”老师课的同学的学号、姓名;
-- 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 * from student WHERE student.sid in
-- (
-- SELECT t1.student_id as stuid FROM
-- (SELECT student_id from score where score.course_id=1) as t1
-- INNER JOIN
-- (SELECT student_id from score where score.course_id=2) as t2
-- ON t1.student_id=t2.student_id
-- )
--
-- 7、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;
-- SELECT
-- student_id,
-- sname
-- FROM
-- score
-- LEFT JOIN student ON score.student_id = student.sid
-- WHERE
-- course_id IN (1, 2)
-- GROUP BY
-- student_id
-- HAVING
-- COUNT(course_id) > 1
-- 8、查询学过“叶平”老师所教的所有课的同学的学号、姓名;
-- SELECT
-- student_id,
-- sname
-- FROM
-- score
-- LEFT JOIN student ON score.student_id = student.sid
-- WHERE
-- course_id IN (
-- SELECT
-- cid
-- FROM
-- course
-- WHERE
-- teacher_id IN (
-- SELECT
-- tid
-- FROM
-- teacher
-- WHERE
-- tname = ‘李平老师‘
-- )
-- )
-- GROUP BY
-- student_id -- SELECT cid from course WHERE teacher_id in(SELECT tid from teacher WHERE tname=‘李平老师‘)
-- 9、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;
-- SELECT t1.student_id,t1.num as c1,t2.num as c2 ,sname from
-- (SELECT student_id,num from score where course_id=1) as t1
-- LEFT JOIN
-- (SELECT student_id,num from score where course_id=2) as t2
-- on t1.student_id=t2.student_id
-- LEFT JOIN student on t1.student_id=student.sid
-- WHERE t1.num>if(ISNULL(t2.num),0,t2.num)
-- 10、查询有课程成绩小于60分的同学的学号、姓名;
-- SELECT * from student WHERE sid in(
-- SELECT DISTINCT(student_id) from score WHERE num<60)
--
-- 11、查询没有学全所有课的同学的学号、姓名;
-- SELECT student_id,COUNT(course_id) from score GROUP BY student_id HAVING COUNT(course_id)<4
--
-- SELECT * from student LEFT JOIN score on student.sid=score.student_id
-- SELECT
-- *
-- FROM
-- student
-- WHERE
-- sid IN (
-- SELECT
-- student.sid
-- FROM
-- student
-- LEFT JOIN score ON student.sid = score.student_id
-- GROUP BY
-- student.sid
-- HAVING
-- COUNT(course_id) < 4
-- )
--
-- 12、查询至少有一门课与学号为“001”的同学所学相同的同学的学号和姓名;
-- SELECT
-- *
-- FROM
-- student
-- WHERE
-- sid IN (
-- SELECT
-- student_id
-- FROM
-- score
-- WHERE
-- course_id IN (
-- SELECT
-- course_id
-- FROM
-- score
-- WHERE
-- student_id = 1
-- )
-- AND student_id != 1
-- GROUP BY
-- student_id
-- )
-- 13、查询至少学过学号为“001”同学所有课的其他同学学号和姓名;
-- SELECT
-- *
-- FROM
-- student
-- WHERE
-- sid IN (
-- SELECT
-- student_id
-- FROM
-- score
-- WHERE
-- course_id IN (
-- SELECT
-- course_id
-- FROM
-- score
-- WHERE
-- student_id = 1
-- )
-- AND student_id != 1
-- GROUP BY
-- student_id
-- HAVING
-- COUNT(student_id) >= 3
-- )
-- 14、查询和“002”号的同学学习的课程完全相同的其他同学学号和姓名;
-- SELECT
-- student_id,
-- COUNT(student_id)
-- FROM
-- score
-- WHERE
-- course_id IN (
-- SELECT
-- course_id
-- FROM
-- score
-- WHERE
-- student_id = 2
-- )
-- AND student_id IN (
-- SELECT
-- student_id
-- FROM
-- score
-- GROUP BY
-- student_id
-- HAVING
-- COUNT(student_id) = (
-- SELECT
-- COUNT(student_id)
-- FROM
-- score
-- WHERE
-- student_id = 2
-- GROUP BY
-- student_id
-- )
-- )
-- GROUP BY
-- student_id
-- HAVING
-- COUNT(student_id) > 2
--
-- 17、按平均成绩从低到高 显示所有学生的“语文”、“数学”、“英语”三门的课程成绩,按如下形式显示: 学生ID,语文,数学,英语,有效课程数,有效平均分;
-- SELECT * from
-- (SELECT student_id, num as ‘生物‘ from score where course_id=1) as t1
-- LEFT JOIN
-- (SELECT student_id, num as ‘物理‘ from score where course_id=2) as t2 ON t1.student_id=t2.student_id
-- LEFT JOIN
-- (SELECT student_id, num as ‘体育‘ from score where course_id=3) as t3 ON t1.student_id=t3.student_id
-- LEFT JOIN
-- (SELECT student_id,AVG(num) as ‘平均分‘ from score WHERE course_id in(1,2,3) GROUP BY student_id ) as t4 on t1.student_id=t4.student_id
-- 18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分;
-- SELECT course_id,MAX(num) as ‘最高分‘,MIN(num) as ‘最低分‘ from score GROUP BY course_id
-- 19、按各科平均成绩从低到高和及格率的百分数从高到低顺序;
-- select course_id,AVG(num) as ‘平均分‘,SUM(case WHEN num>=60 THEN 1 ELSE 0 END)*100/COUNT(course_id) as ‘及格率‘ from score GROUP BY course_id
-- 20、课程平均分从高到低显示(现实任课老师);
-- SELECT course_id,AVG(num),tname from score LEFT JOIN course ON score.course_id=course.cid LEFT JOIN teacher on course.teacher_id=teacher.tid GROUP BY course_id
-- 21、查询各科成绩前三名的记录:(不考虑成绩并列情况)
-- 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 3,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
--
-- 22、查询每门课程被选修的学生数;
-- SELECT cname,COUNT(course_id) as ‘人数‘ from score LEFT JOIN course on score.course_id=course.cid GROUP BY course_id
-- 23、查询出只选修了一门课程的全部学生的学号和姓名;
-- SELECT student_id,COUNT(student_id),sname from score LEFT JOIN student on score.student_id=student.sid GROUP BY student_id having COUNT(student_id)=1
-- 24、查询男生、女生的人数;
-- SELECT gender,COUNT(gender) from student GROUP BY gender
-- 25、查询姓“张”的学生名单;
-- select sname from student where sname like ‘张%‘;
-- 26、查询同名同姓学生名单,并统计同名人数;
-- select sname,count(1) as count from student group by sname;
-- 27、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列;
-- SELECT course_id,AVG(num) as a from score GROUP BY course_id ORDER BY a ASC,course_id DESC
-- 28、查询平均成绩大于85的所有学生的学号、姓名和平均成绩;
-- SELECT student_id,AVG(num) from score GROUP BY student_id HAVING AVG(num)>80
-- 29、查询课程名称为“数学”,且分数低于60的学生姓名和分数;
-- SELECT * from score LEFT JOIN course on score.course_id=course.cid
-- LEFT JOIN student on score.student_id=student.sid WHERE cname=‘物理‘ and num>60
-- 30、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名;
-- 31、求选了课程的学生人数
-- 32、查询选修“杨艳”老师所授课程的学生中,成绩最高的学生姓名及其成绩;
--
-- SELECT tname,student_id ,num from score LEFT JOIN course on score.course_id=course.cid
-- LEFT JOIN teacher on course.teacher_id=teacher.tid
-- WHERE tname=‘张磊老师‘ GROUP BY tname,student_id,num ORDER BY num DESC LIMIT 2
--
-- 33、查询各个课程及相应的选修人数
-- 34、查询不同课程但成绩相同的学生的学号、课程号、学生成绩;
-- SELECT num,course_id from score LEFT JOIN student on score.student_id=student.sid GROUP BY num,course_id ORDER BY num
-- 37、查询全部学生都选修的课程的课程号和课程名;
-- 38、查询没学过“叶平”老师讲授的任一门课程的学生姓名
-- SELECT * FROM
-- (SELECT student_id,COUNT(student_id) as count1 from score GROUP BY student_id) as t1
-- LEFT JOIN
-- (SELECT student_id,COUNT(student_id) as count2 from score where course_id not in(SELECT cid from course LEFT JOIN teacher on course.teacher_id=teacher.tid WHERE tname=‘李平老师‘
-- ) GROUP BY student_id) as t2
-- on t1.student_id=t2.student_id
-- WHERE t1.count1=t2.count2
--
-- 39、查询两门以上不及格课程的同学的学号及其平均成绩;
--
-- select student_id,count(1) from score where num < 60 group by student_id having count(1) > 2
--
-- 40、检索“004”课程分数小于60,按分数降序排列的同学学号;
-- select student_id from score where num< 60 and course_id = 4 order by num desc;
--
-- 41、删除“002”同学的“001”课程的成绩;
-- delete from score where course_id = 1 and student_id = 2
参考文章:https://www.cnblogs.com/wupeiqi/articles/5748496.html#commentform
mysql常见面试题
标签:The tar reference limit www var ase 常见 record