MySQL经典50题

1、

#1、查询“01”课程比“02”课程成绩高的所有学生的学号;
SELECT s1.sid
FROM SC s1 JOIN SC s2 ON s1.sid=s2.sid AND s1.cid='01' AND s2.cid='02' AND s1.score>s2.score


2、

#2、查询平均成绩大于60分的同学的学号和平均成绩;
SELECT sid as 学号, avg(score) as 平均成绩
FROM SC GROUP BY sid HAVING 平均成绩>60


3、

#3、查询所有同学的学号、姓名、选课数、总成绩
SELECT s2.sid as 学号, s2.sname as 姓名, a.b as 选课数, a.c as 总成绩
FROM Student s2,
(SELECT s1.sid as id ,count(s1.cid) as b, sum(s1.score) as c
FROM SC s1 JOIN Student s2 ON s1.sid=s2.sid GROUP BY s1.sid)a
WHERE s2.sid=a.id 


4、

#4、查询姓“李”的老师的个数;
SELECT * FROM Teacher WHERE tname LIKE '李%'


5、

#5、查询没学过“张三”老师课的同学的学号、姓名;
SELECT DISTINCT(s1.sid) as 学号,s1.sname as 姓名
FROM Student s1 JOIN SC s2 ON s1.sid=s2.sid AND s2.cid IN
(SELECT c1.cid FROM Teacher t1 JOIN Course c1 ON t1.tid=c1.tid AND t1.tname NOT LIKE '张三') 


6、

#6、查询学过编号“01”并且也学过编号“02”课程的同学的学号、姓名;
SELECT sid as 学号, sname as 姓名 FROM Student WHERE sid in
(SELECT s1.sid
FROM SC s1 JOIN SC s2 ON s1.sid=s2.sid AND s1.cid='01' AND s2.cid='02')


7、

#7、查询学过“张三”老师所教的课的同学的学号、姓名;
SELECT s2.sid as 学号, s2.sname as 姓名
FROM SC s1 JOIN Student s2 ON s1.sid=s2.sid AND s1.cid IN
(SELECT cid FROM Course WHERE tid IN
(SELECT tid FROM Teacher WHERE tname='张三'))


8、

#8、查询课程编号“01”的成绩比课程编号“02”课程低的所有同学的学号、姓名;
SELECT a.sid as 学号, s3.sname as 姓名
FROM (SELECT s1.sid FROM SC s1 JOIN SC s2 ON s1.sid=s2.sid AND s1.cid='01' AND s2.cid='02' AND s1.score<s2.score)a JOIN Student s3 ON a.sid=s3.sid  


9、

#9、查询所有课程成绩小于60分的同学的学号、姓名;
SELECT DISTINCT(s2.sid) as 学号, s2.sname as 姓名
FROM SC s1 JOIN Student s2 ON s1.sid=s2.sid WHERE s1.score<60


10、

#10、查询没有学全所有课的同学的学号、姓名;
SELECT s2.sid as 学号, s2.sname as 姓名
FROM (SELECT s1.sid as s3, count(1) as n
FROM SC s1 GROUP BY s1.sid HAVING n!=(SELECT COUNT(1) FROM Course))a JOIN Student s2 ON a.s3=s2.sid 


11、
利用01的课程号当作连表查询的条件

#11、查询至少有一门课与学号为“01”的同学所学相同的同学的学号和姓名;
SELECT s2.sid as 学号, s2.sname as 姓名
FROM(SELECT DISTINCT(s1.sid)as s3
FROM(SELECT cid FROM SC WHERE sid='01')a JOIN SC s1 ON a.cid=s1.cid
WHERE s1.sid!='01')b JOIN Student s2 ON b.s3=s2.sid


12、

#12、查询和"01"号的同学学习的课程完全相同的其他同学的学号和姓名
##01学生上课的数量
SELECT COUNT(1) FROM SC WHERE sid='01'
##
SELECT s3.sid as 学号, s3.sname as 姓名
FROM Student s3 JOIN (SELECT s1.sid as s2,count(1) as n
FROM(SELECT * FROM SC WHERE sid='01')a JOIN SC s1 ON a.cid=s1.cid GROUP BY s1.sid HAVING n=3)b
WHERE sid=b.s2 AND sid!='01'


13、

#13、把“SC”表中“张三”老师教的课的成绩都更改为此课程的平均成绩;
##这里不用更新了,筛选出来,计算平均数,生成搜索视图就行
SELECT avg(score) FROM SC WHERE cid IN(
SELECT cid FROM Course WHERE tid IN (SELECT tid FROM Teacher WHERE tname='张三'))


14、

#14、查询没学过"张三"老师讲授的任一门课程的学生姓名
SELECT sname as 学生姓名 FROM Student WHERE sid NOT IN
(SELECT sid FROM SC s1 JOIN (SELECT cid FROM Course WHERE tid IN(SELECT tid FROM Teacher WHERE tname='张三'))a ON s1.cid=a.cid)


15、

#15、查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
SELECT s2.sid as 学号, s2.sname as 姓名, a.c1 as 平均成绩
FROM Student s2 JOIN (SELECT sid as id,count(1) as n,AVG(score) as c1
FROM SC s1 WHERE score<60 GROUP BY sid HAVING n>=2)a WHERE s2.sid=a.id


16、

#16、检索"01"课程分数小于60,按分数降序排列的学生信息
SELECT s4.* ,a.s3
FROM Student s4 JOIN
(SELECT sid as s2, score as s3 FROM SC s1 WHERE cid='01' AND score<60)a ON s4.sid=a.s2 ORDER BY a.s3 DESC


17、

#17、按平均成绩从高到低显示所有学生的平均成绩
##排序错位
SELECT s1.sid as 学号, s1.sname as 姓名, a.av as 平均成绩
FROM Student as s1 JOIN
(SELECT sid, avg(score) as av FROM SC s1 GROUP BY sid ORDER BY av DESC)a
ON s1.sid=a.sid
#要把排序写在外面
SELECT s1.sid as 学号, s1.sname as 姓名, a.av as 平均成绩
FROM Student as s1 JOIN
(SELECT sid, avg(score) as av FROM SC s1 GROUP BY sid )a
ON s1.sid=a.sid ORDER BY a.av DESC


18、

#18、查询各科成绩最高分、最低分和平均分:以如下形式显示:课程ID,课程name,最高分,最低分,平均分,及格率
SELECT a.cid as 课程ID, Course.cname as 课程name,a.ma as 最高分, a.mi as 最低分, a.av as 平均分,a.p as 及格率
FROM(SELECT cid,MAX(score) as ma ,MIN(score) as mi ,AVG(score) as av, CONCAT((COUNT(if (score>=60,score,NULL))/COUNT(score))*100,'%') as p
FROM SC s1 GROUP BY cid)a, Course WHERE a.cid=Course.cid
##精简版
SELECT s1.cid,MAX(score) as ma ,MIN(score) as mi ,AVG(score) as av, CONCAT((COUNT(if (score>=60,score,NULL))/COUNT(score))*100,'%') as p
FROM SC s1 JOIN Course ON s1.cid=Course.cid GROUP BY s1.cid

COUNT(IF(条件,true时结果,false时结果))这个语句要记住!!!
19、

#19、按各科平均成绩从低到高和及格率的百分数从高到低顺序
SELECT cid, AVG(score) as av,COUNT(IF(score>=60,score,NULL))/COUNT(score) as p FROM SC GROUP BY cid ORDER BY av ASC,p DESC


20、

#20、查询学生的总成绩并进行排名
SELECT sid,SUM(score) as sscore
FROM SC as s1 GROUP BY sid ORDER BY sscore  DESC


21、

#21、查询不同老师所教不同课程平均分从高到低显示
SELECT s1.cid as 课程编号, t1.tname as 老师姓名,AVG(s1.score) as av
FROM SC s1 JOIN Course c1 ON s1.cid=c1.cid JOIN Teacher t1 ON c1.tid=t1.tid GROUP BY t1.tname , s1.cid ORDER BY av DESC


22、
23、
24、

#24、查询学生平均成绩及其名次
SELECT (@i:=@i+1) as 排名,a.s as 学号,a.av as 平均成绩
FROM(SELECT sid as s,AVG(score) as av
FROM SC GROUP BY sid ORDER BY av DESC)a,(SELECT @i:=0) as j 


25、
26、

#26、查询每门课程被选修的学生数
SELECT cname as 课程, count(DISTINCT(sid))as 选课学生人数
FROM SC s1 JOIN Course c1 ON s1.cid=c1.cid GROUP BY cname


27、

#27、查询出只选修了一门课程的全部学生的学号和姓名
###数据中没有之选了一门的,所以改成选两门的吧
SELECT sid as 学号, sname as 姓名 FROM Student WHERE sid IN
(SELECT sid as id
FROM SC s1 GROUP BY sid HAVING count(1)=2)


28、

#28、查询男生、女生人数
SELECT ssex as 性别, COUNT(1) as 人数
FROM Student GROUP BY ssex


29、

#29、查询名字中含有"风"字的学生信息
SELECT * FROM Student WHERE sname LIKE '%风%'


30、

#30、查询同名同性学生名单,并统计同名人数
####同名同性其实就是一类,GROUP BY 就行!!!
SELECT sname,ssex, count(1) as n
FROM Student GROUP BY sname,ssex HAVING n>1

31、

#31、查询1990年出生的学生名单(注:Student表中Sage列的类型是datetime)
SELECT * FROM Student WHERE YEAR(sage)=1990


32、

SELECT cid, AVG(score) as av
FROM SC s1 GROUP BY cid ORDER BY av asc,cid DESC


37、

#37、查询不及格的课程,并按课程号从大到小排列
SELECT sid,cid,score FROM SC WHERE score<60 ORDER BY cid DESC


38、

#38、查询课程编号为"01"且课程成绩在60分以上的学生的学号和姓名;
SELECT s1.sid as 学号,s1.sname as 姓名
FROM(SELECT sid FROM SC WHERE cid='01' AND score>60)a LEFT JOIN Student s1 ON a.sid=s1.sid

40、

#40、查询选修“张三”老师所授课程的学生中,成绩最高的学生姓名及其成绩
SELECT a.s as 学号, s1.sname as 姓名,a.sc1 as 成绩
FROM(SELECT sid as s,score as sc1 FROM SC WHERE cid=(SELECT cid FROM Course WHERE tid=(SELECT tid FROM Teacher WHERE tname='张三')))a LEFT JOIN Student s1 ON a.s=s1.sid ORDER BY a.sc1 DESC LIMIT 1


42、查询每门功课成绩最好的前两名

43、

#43、统计每门课程的学生选修人数(超过5人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列
SELECT cid as 课程号, count(1) as number
FROM SC s1 GROUP BY cid HAVING number>5 ORDER BY number DESC,cid ASC


44、

#44、检索至少选修两门课程的学生学号
SELECT s2.sid as 学号, s2.sname as 姓名
FROM(SELECT sid FROM SC s1 GROUP BY sid HAVING COUNT(1)>=2)a LEFT JOIN Student s2 ON a.sid=s2.sid


45、

#45、查询选修了全部课程的学生信息
SELECT a.sid as 学号, s1.sname as 姓名
FROM(SELECT sid
FROM SC GROUP BY sid HAVING count(1)=(SELECT COUNT(DISTINCT(cname)) as n FROM Course))a, Student s1 WHERE a.sid=s1.sid


46、

#46、查询各学生的年龄
SELECT sid as 学号, sname as 姓名,(YEAR(NOW())-YEAR(sage)) as 年龄
FROM Student 


47-48

#47、查询本周过生日的学生
SELECT WEEK(NOW())#查看当前星期
SELECT WEEK(sage) FROM Student#查看所有学生生日对应的星期
SELECT sid,sname FROM Student WHERE WEEK(sage)=WEEK(NOW())
#48、查询下周过生日的学生
SELECT sid,sname FROM Student WHERE WEEK(sage)=WEEK(NOW())+1

49-50

#49、查询本月过生日的学生
SELECT sid,sname FROM Student WHERE MONTH(sage)=MONTH(NOW())
#50、查询下月过生日的学生
SELECT sid,sname FROM Student WHERE MONTH(sage)=MONTH(NOW())+1

SQL笔试经典50题相关推荐

  1. SQL笔试经典50题及答案解析(题目1-10)

    前言 最近博主在准备数据分析岗位的笔试和面试,其中的考察重点就是SQL.听说练了这50道题目(题目和数据来源参考:互联网校招SQL笔试经典50题及答案解析),什么现场手撕SQL统统都不怕,我就赶紧来练 ...

  2. SQL笔试经典50题及答案解析

    [转]SQL笔试经典50题及答案解析 建表语句 create table Student(sid varchar(10),sname varchar(10),sage datetime,ssex nv ...

  3. SQL笔试经典50题及答案解析(题目21-30)

    前言 最近博主在准备数据分析岗位的笔试和面试,其中的考察重点就是SQL.听说练了这50道题目(题目和数据来源参考:互联网校招SQL笔试经典50题及答案解析),什么现场手撕SQL统统都不怕,我就赶紧来练 ...

  4. 【SQL】经典50题 [ 3 ]:Q31-Q50

    [SQL]经典50题 [ 3 ]:Q31-Q50 准备:表的建立 Q31. 查询1990年出生的学生名单(注:Student表中Sage列的类型是datetime) 1. 代码 2. 运行结果 3. ...

  5. SQL语句经典50题

    Sql语句经典50题 注:数据库版本为mysql 8.0 #学生表 CREATE TABLE `Student`( `s_id` VARCHAR(20), `s_name` VARCHAR(20) N ...

  6. SQL练习——经典50题

    1. 经典50题 原博客链接 1.1 简介 表格 学生表(Student) 课程表(Course) 教师表(Teacher) 成绩表(Score) 数据插入 # Student 学生表 CREATE ...

  7. SQL面试经典50题

    冲浪时发现了知乎上这位老师图解SQL面试题:经典50题 - 知乎总结的五十题,看了下大概可以应付一般的面试场景了,自己做了下,发现了其中有几个答案的问题并进行了改正,记录下方便以后自己面试前翻看.如果 ...

  8. 图解SQL面试题:经典50题

    图解SQL面试题:经典50题 已知有如下4张表: 学生表:student(学号,学生姓名,出生年月,性别) 成绩表:score(学号,课程号,成绩) 课程表:course(课程号,课程名称,教师号) ...

  9. 经典sql语句50题_SQL面试经典50题:带你从建表开始

    大家好,相信很多学习数据分析的小伙伴在面试前都经历过刷题,本系列小编将带大家一起来刷一刷SQL面试必会的经典50题. 当然本系列文章不单单是刷题,小编会带着大家梳理一下解题时用到的知识点,所以基础比较 ...

  10. 常见的SQL笔试题和面试题:SQL经典50题

    常见的SQL笔试题和面试题(上):经典50题 已知有如下4张表: 学生表:STUDENT(S#,SNAME,SAGE,SSEX) 课程表:COURSE(C#,CNAME,T#) 成绩表:SC(S#,C ...

最新文章

  1. Ceph分层存储分析
  2. 独家 | 图解BiDAF中的单词嵌入、字符嵌入和上下文嵌入(附链接)
  3. android 绘图之Canvas,Paint类
  4. js 获取中文的拼音
  5. 【实用】SAP MR8M校验增强
  6. Flask 知识总结
  7. linux安装mysql遇到的问题_Linux下安装MySQL5.7及遇到的问题解决方法
  8. php js 图片旋转,jQuery实现可以控制图片旋转角度效果
  9. 使用Fastjson提示No serializer found for class
  10. 关于web.xml 中的 welcome-file-list 的认识
  11. Adobe Bridge 2020新增功能
  12. php大写转为小写,PHP 大小写转换函数 lcfirst ucfirst ucwords strtolower
  13. 微信第三方开放平台代公众号实现业务
  14. 为BlueLake主题增加自定义icon图标
  15. VScode+Latex (Recipe terminated with fatal error: spawn xelatex ENOENT)和latex简单使用介绍
  16. Linux mtd与ubi关系详解,ubi使用命令总结
  17. 计算机三级周跃视频笔记
  18. Django实现邮箱注册系统
  19. 【STM32WB55 测评】BLE demo程序执行过程浅析
  20. cookie expires和max-age的区别

热门文章

  1. 【Tiny4412】Tiny4412开发板介绍
  2. 汇编语言程序设计--基于ARM
  3. 前端书籍推荐之《精通JavaScript+jQuery》
  4. VirtualBox安装VBoxGuestAdditions增强功能
  5. DeepFaceLab 新手入门教程
  6. 360安全卫士加速球误关闭某个应用软件
  7. python写游戏的好选择: easygame
  8. flex + tomcat + myEclipse环境配置与使用(四)
  9. iOS 友盟分享总结
  10. 计算平均指令时间_欧姆龙PLC指令应用案例