MySQL面试题(下)

09)查询学过「张三」老师授课的同学的信息

SELECT
 
s.*,c.cname,t.tname
 
FROM
 
t_mysql_teacher t,t_mysql_student s,t_mysql_course c,t_mysql_score sc
 
WHERE
 
t.tid=c.tid and c.cid=sc.cid and sc.sid=s.sid and tname = '张三'

10)查询没有学全所有课程的同学的信息

SELECT
 
s.sid,s.sname,count(sc.score) n
 
FROM
 
t_mysql_score sc,t_mysql_student s
 
WHERE
 
sc.sid=s.sid
 
GROUP BY
 
s.sid,s.sname
 
HAVING
 
n<(select count(c.cid) from t_mysql_course c )

11)查询没学过"张三"老师讲授的任一门课程的学生姓名

SELECT s.* FROM t_mysql_student s where s.sid not in(
 
SELECT
 
sc.sid
 
FROM
 
t_mysql_teacher t,t_mysql_course c,t_mysql_score sc
 
WHERE
 
t.tid=c.tid and c.cid=sc.cid and t.tname='张三'
 
GROUP BY
 
sc.sid)


12)查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩

SELECT
 
s.sid,s.sname,ROUND(AVG(sc.score)) 平均成绩,COUNT(sc.cid) n
 
FROM
 
t_mysql_student s,t_mysql_score sc
 
WHERE
 
s.sid=sc.sid and sc.score<60
 
GROUP BY
 
s.sid,s.sname
 
HAVING
 
n>=2


13)检索" 01 "课程分数小于 60,按分数降序排列的学生信息

SELECT
 
s.*
 
FROM
 
t_mysql_score sc,t_mysql_student s
 
WHERE
 
sc.sid=s.sid and sc.score<60 and cid='01'
 
ORDER BY sc.score DESC


14)按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩

SELECT
s.sid,s.sname,round(AVG(sc.score),2) avgNum ,
max(case when sc.cid='01' then sc.score end)语文,
max(case when sc.cid='02' then sc.score end)数学,
max(case when sc.cid='03' then sc.score end)英语
FROM
t_mysql_score sc,t_mysql_student s,t_mysql_course c
WHERE
 sc.sid=s.sid and sc.cid=c.cid
GROUP BY
s.sid,s.sname
ORDER BY avgNum desc
 


15)查询各科成绩最高分、最低分和平均分:
以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90
要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列

SELECT
	c.cid,
	c.cname,
	count(sc.sid) 人数,
	max(sc.score) 最高分,
	min(sc.score) 最低分,
	ROUND(avg(sc.score),2) 平均分,
	CONCAT(ROUND(sum(if(sc.score>=60,1,0))/(SELECT COUNT(1) 
	from t_mysql_student)*100 ,2),'%') 及格率,
	CONCAT(ROUND(sum(if(sc.score>=70 and sc.score<80,1,0))/(SELECT COUNT(1) 
	from t_mysql_student)*100 ,2),'%') 中等率,
	CONCAT(ROUND(sum(if(sc.score>=80 and sc.score<90,1,0))/(SELECT COUNT(1) 
	from t_mysql_student)*100 ,2),'%') 优良率,
	CONCAT(ROUND(sum(if(sc.score>=90,1,0))/(SELECT COUNT(1) 
	from t_mysql_student)*100 ,2),'%') 优秀率
FROM
	t_mysql_score sc
	LEFT JOIN t_mysql_course c ON sc.cid = c.cid 
GROUP BY
	c.cid,
	c.cname

相关推荐

  1. MySQL面试()

    2024-01-10 19:40:03       34 阅读
  2. MySQL面试总结

    2024-01-10 19:40:03       43 阅读
  3. MySQL面试

    2024-01-10 19:40:03       43 阅读
  4. Mysql面试

    2024-01-10 19:40:03       29 阅读
  5. MySQL经典面试

    2024-01-10 19:40:03       31 阅读
  6. mysql优化面试

    2024-01-10 19:40:03       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-10 19:40:03       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-10 19:40:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-10 19:40:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-10 19:40:03       20 阅读

热门阅读

  1. 面试 React 框架八股文十问十答第一期

    2024-01-10 19:40:03       40 阅读
  2. glusterFS

    glusterFS

    2024-01-10 19:40:03      34 阅读
  3. linux系统关于nginx服务

    2024-01-10 19:40:03       42 阅读
  4. 修改 Git 仓库的远程地址

    2024-01-10 19:40:03       37 阅读
  5. C#语言练手小功能

    2024-01-10 19:40:03       37 阅读
  6. 计算几何学(工程版)

    2024-01-10 19:40:03       40 阅读
  7. H5语言-入门教程

    2024-01-10 19:40:03       28 阅读
  8. CE322 Algorithmic Game Theory

    2024-01-10 19:40:03       31 阅读
  9. 【打卡】牛客网:BM75 编辑距离(一)

    2024-01-10 19:40:03       39 阅读