sql题目---day39
# 1、查询所有的课程的名称以及对应的任课老师姓名
#where
select
teacher.tname,course.cname
from
teacher,course
where
course.teacher_id = teacher.tid #内联写法
select
teacher.tname,course.cname
from
teacher inner join course on course.teacher_id = teacher.tid; # 2、查询学生表中男女生各有多少人
select
gender,count(*)
from
student
group by
gender; # 3、查询物理成绩等于100的学生的姓名
#where
select
student.sid,student.sname,score.num
from
course,score,student
where
course.cid = score.course_id
and student.sid = score.student_id
and course.cname = "物理"
and score.num = 100 # inner join
select
student.sid,student.sname,score.num
from
course inner join score on course.cid = score.course_id
inner join student on student.sid = score.student_id
where
course.cname = "物理"
and score.num = 100 #4.查询平均成绩大于八十分的同学的姓名和平均成绩
select
student_id,avg(num)
from
score
group by
student_id
having
avg(num) > 80; #where 写法
select
student_id,avg(num),sname
from
score,student
where
score.student_id = student.sid
group by
student_id
having
avg(num) > 80; #内联写法
select
student_id,avg(num),sname
from
score inner join student on score.student_id = student.sid
group by
student_id
having
avg(num) > 80; # 5、查询所有学生的学号,姓名,选课数,总成绩
#选课数
select
student_id,count(*)
from
score
group by
student_id
#总成绩
select
student_id,sum(num)
from
score
group by
student_id #where
'''group by +字段 by谁搜谁,跟其他表要搜索的字段无关'''
select
student_id,sname,count(*),sum(num)
from
score,student
where
score.student_id = student.sid
group by
student_id; #内联写法
select
student_id,sname,count(*),sum(num)
from
score inner join student on score.student_id = student.sid
group by
student_id; #附加(展现所有学生,使用左联以学生表为主)
select
student.sid,sname,count(score.course_id),sum(num)
from
student left join score on score.student_id = student.sid
group by
student.sid; ## 6、 查询姓李老师的个数
select
count(*)
from
teacher
where
tname like "李%"; # 7、 查询没有报李平老师课的学生姓名
#1.先查报了李平老师课程的学生id
'''distinct 去重
distinct score.student_id
distinct(score.student_id)
'''
select
distinct(score.student_id)
from
teacher,course,score
where
teacher.tid = course.teacher_id
and course.cid =score.course_id
and teacher.tname = "李平";
#2.除了这些学习李平老师id的,剩下的就没有学习李平课程的
select
*
from
student
where
sid not in (1号);
#3.综合拼接
select
sname
from
student
where
sid not in (select
distinct(score.student_id)
from
teacher,course,score
where
teacher.tid = course.teacher_id
and course.cid =score.course_id
and teacher.tname = "李平"
); ## 8、 查询物理课程的分数比生物课程的分数高的学生的学号
#1.物理课程学生分数
select
score.student_id,score.num,course.cid
from
course inner join score on course.cid = score.course_id
where
course.cname ="物理";
#2.生物课程学生分数
select
score.student_id,score.num,course.cid
from
course inner join score on course.cid = score.course_id
where
course.cname = '生物'
#3.综合拼接
select
t1.t1_id
from
(select
score.student_id as t1_id,score.num as t1_num,course.cid as t1_cid
from
course inner join score on course.cid = score.course_id
where
course.cname = "物理"
) as t1
inner join(select
score.student_id as t2_id,score.num as t2_num,course.cid as t2_cid
from
course inner join score on course.cid = score.course_id
where
course.cname = "生物"
) as t2
on t1.t1_id = t2.t2_id
where
t1.t1_num > t2.t2_num; # 9、 查询没有同时选修物理课程和体育课程的学生姓名
#1.找物理和体育的课程id
select
course.cid
from
course
where
cname ="物理" or cname = "体育"
#2.找学习了体育和物理的学生id
select
student_id
from
score
where
course_id in(2,3);
#3.拼接数据
select
student_id
from
score
where
course_id in(select
course.cid
from
course
where
cname = "物理" or cname = "体育"
);
#4.(同时)学习物理和体育的学生id
select
student_id
from
score
where
course_id in (select
course.cid
from
course
where
cname = "物理" or cname = "体育"
)
group by
score.student_id
having
count(*) = 2;
#5.除了同时学习物理和体育的学生id之外,剩下的都是没有同时学习的id
select
sid
from
student
where
sid not in (3号)
#6.综合拼接
select
sid
from
student
where
sid not in (select
student_id
from
score
where
course_id in (select
course.cid
from
course
where
cname = "物理" or cname = "体育"
)
group by
score.student_id
having
count(*) = 2) #10、查询挂科超过两门(包括两门)的学生姓名和班级
'''通过查询出来的id,在和其他表进行联表,找出需要中的对应字段展示即可'''
select
student_id,sname,caption
from
score inner join student on student.sid = score.student_id
inner join class on class.cid = student.class_id
where
num < 60
group by
student_id
having
count(*) >= 2; # 11、查询选修了所有课程的学生姓名
# 1.先统计所有课程总数
select count(*) from course;
#2.按照学生分类,总数量是1号查询出来的数据,就认为学了所有课
select
score.student_id,student.sname
from
socre inner join student on score.student_id = student.sid
group by
score.student_id
having
count(*) = (select count(*) from course);
#3.综合拼接
select
score.student_id,student.sname
from
score inner join student on score.student_id = student.sid
group by
score.student_id
having
count(*) = (1号); # 12、查询李平老师教的课程的所有成绩记录
#内联写法
select
score.student_id,course.cid,course.cname,score.num
from
teacher,course,score
where
teacher.tid = course.teacher_id
and
score.course_id = course.cid
and
teacher.tname = '李平';
#1.找李平老师所有课程id
select
course.cid
from
teacher,course
where
teacher.tid = course.teacher_id
and
teacher.tname ="李平";
#2.找这几门课程对应的数据
select
*
from
score
where
course_id in (1号)
#3.综合拼接
select
*
from
score
where
course_id in (select
course.cid
from
teacher,course
where
teacher.tid = course.teacher_id
and
teacher.tname = "李平"
); #13.查询全部学生都选修了的课程号和课程名
#1.通过score表,找有成绩的学生个数
select
count(distinct student_id)
from
score
#2.按照课程分类,筛选学生个数为13的课程id(一个学科被13人学习,等于说都选秀了)
select
course_id
from
score
group by
course_id
having
count(*) = (1号数据13);
#3.综合拼接
select
course_id,course.cname
from
score,course
where
score.course_id = course.cid
group by
course_id
having
count(*) = (select
count(distinct student_id)
from
score
); #14.查询每门课程被选修的次数
select
course_id,count(*)
from
score
group by
course_id; #15.查询只选修了一门课程的学生学号和姓名
#1.按照学生分类,统计个数是1(选一门)
select
student_id
from
score
group by
student_id
having
count(*) = 1;
#2.顺带连一张学生表,通过id拿学生姓名
select
student_id,student.sname
from
score inner join student on score.student_id =student.sid
group by
student_id
having
count(*) = 1; #16.查询所有学生考出的成绩并按从高到低排序(成绩去重)
select
distinct num
from
score
order by
num desc; #加上学生形成一一对应的关系
select
distinct num,student_id
from
score
order by
num desc; ## 17、查询平均成绩大于85的学生姓名和平均成绩
#1.先搜索出学生id
select
score.student_id,avg(score.num)
from
score
group by
score.student_id
having
avg(score.num) > 85;
#2.拿id顺带联一张学生表找出姓名
select
score.student_id,avg(score.num),student.sname
from
score inner join student on student.sid =score.student_id
group by
score.student_id
having
avg(score.num) >85; # 18、查询生物成绩不及格的学生姓名和对应生物分数
select
student.sname,score.num,course.cname
from
course inner join score on score.course_id =course.cid
inner join student on score.student_id = student.sid
where
score.num < 60
and
course.cname ="生物"; #查询在所有选修了李平老师课程的学生中,这些课程(李平老师的课程,不是所有课程)平均成绩最高的学生姓名
#1.找李平老师所教的课程id
select
course.cid
from
teacher,course
where
teacher.tic =course.teacher_id
and
teacher.tname = "李平"; #(2,4)
#2.在学习李平老师课程基础上,按照学生分类,找出平均分最高的id
select
score.student_id
from
score
where
score.course_id in (2,4)
group by
score.student_id
order by
avg(num) desc limit 1;
#3.通过学生id,顺带连一张学生表,找出姓名
select
score.student_id,student.sname,avg(num)
from
score,student
where
score.student_id =student.sid
and
score,course_id in(2,4)
group by
score.student_id
order by
avg(num) desc limit 1; # 20、查询每门课程成绩最好的学生姓名和分数,课程id
#1.找分数最大值,按照课程分类
select
course_id,max(num) as max_num
from
score
group by
score.course_id;
#2.找出该分数对应的学生相关数据
select
*
from
score as t1 inner join(1号) as t2 on t1.course_id = t2.course_id
inner join student t3 on t1.student_id =t3.sid;
#3.数据拼接
select
t2.max_num,t3.sname,t1.course_id
from
score as t1 inner join(select
course_id,max(num) as max_num
from
score
group by
score.course_id
) as t2 on t1.course_id = t2.course_id
inner join student t3 on t1.student_id = t3.sid
where
t2.max_num = t1.num #21.查询不同课程但成绩相同的,学生号,成绩,课程号
select
s1.student_id as s1_sid,
s2.student_id as s2_sid,
s1.course_id as s1_cid,
s2.course_id as s2_cid,
s1.num as s1_num,
s2.num as s2_num
from
score as s1,
score as s2
where
# 不同的课程 (不要使用!= 相同的数据会查两遍,>的一遍,<的一遍)
s1.course_id > s2.course_id
and
s1.num = s2.num # 24、任课最多的老师中学生单科成绩最高的课程id、学生姓名和分数
# 1.老师任课的最大数量是几门?
select
count(*)
from
course
group by
teacher_id
order by
count(*) desc limit 1 # 2.找最大任课数量为2的老师id
select
teacher_id
from
course
group by
teacher_id
having
count(*) = (1号) # 综合拼接
select
teacher_id
from
course
group by
teacher_id
having
count(*) = (select
count(*)
from
course
group by
teacher_id
order by
count(*) desc limit 1) # 3.通过老师id,找对应课程
select cid from course where teacher_id in (2) # 2,4 # 4.通过该课程号,找其中的最大分数
select
course_id,
max(num) as max_num
from
score
where
course_id in (3号)
group by
course_id # 5.把对应的学生姓名,最大分数拼在一起,做一次单表查询
select
t1.num,t2.max_num,t3.sid,t3.sname,t1.course_id
from
score t1 inner join (4号) t2 on t1.course_id = t2.course_id
inner join student t3 on t3.sid = t1.student_id
where
t1.num = t2.max_num # 综合拼装: select
t1.num,t2.max_num,t3.sid,t3.sname,t1.course_id
from
score t1 inner join (select
course_id,
max(num) as max_num
from
score
where
course_id in (select cid from course where teacher_id in (select
teacher_id
from
course
group by
teacher_id
having
count(*) = (select
count(*)
from
course
group by
teacher_id
order by
count(*) desc limit 1)))
group by
course_id
) t2 on t1.course_id = t2.course_id
inner join student t3 on t3.sid = t1.student_id
where
t1.num = t2.max_num
sql题目---day39的更多相关文章
- LeetCode SQL题目(第一弹)
LeetCode SQL题目 注意:Leetcode上的SQL编程题都提供了数据表的架构程序,只需要将它贴入本地数据库即可调试自己编写的程序 不管是MS-SQL Server还是MySQL都需要登陆才 ...
- Oracle语法 及 SQL题目(一)
目录 课例复制 SQL题目一 SQL题目二 SQL题目三 笔记 课例复制 OCM 全称:Oracle Certified Master 认证大师 含义:Oracle 原厂推出的数据库方向最高级别认证 ...
- Oracle语法 及 SQL题目(三)
目录 SQL题目六 第一个问题思路(查询酒类商品的总点击量) 第二个问题思路(查询每个类别所属商品的总点击量,并按降序排列) 第三个问题思路(查询所有类别中最热门的品种(点击量最高),并按点击量降顺序 ...
- 网上一些sql题目的解决(网上答案+自己答案)
此篇博客内容引自“MySQL经典练习题及答案” 废话不不多说!!! 建表.插入数据. --建表 --学生表 CREATE TABLE Student( s_id VARCHAR(20), s_name ...
- 面试题中遇到的SQL题目
1.假设有一张表示cj表 Name Subject Result 张三 语文 80 张三 数学 90 张三 物理 85 李四 语文 85 李四 数学 92 李四 物理 82 要求查询结果: 姓名 语文 ...
- 感觉挺有意思的SQL题目
1.有如下数据,要求查询每个班最低分和最高分,并将最高分与最低分显示为同一列 ID Student CourseName Score1 张三 English 802 张三 Math 703 张三 Ch ...
- sql 题目
1.自增列 通用: ) from table b where b.sid<a.sid) ,* from table a; ,),* from ... 第二个已经有主键自增列的就不可以用了 还有就 ...
- Oracle语法 及 SQL题目(二)
目录 课例复制 思考题四 解题思路 思考题五 解题思路 课例复制 思考题四 最近,经过你的努力,你得到了一份工作,成为了百货公司的一位经理. 到位后,你发现你的销售数据库中有两张表,一个是商店促销时间 ...
- Sql题目精选练习
1.每日经典sql 1.1.1 根据三张关系表查询雇员中工资最高的雇员的员工姓名.工资和部门号. salary(工资表) employee(员工表) department(部门表) Sql语句: SE ...
- Leetcode中的SQL题目练习(二)
175. Combine Two Tables https://leetcode.com/problems/combine-two-tables/description/ Description Pe ...
随机推荐
- [转帖]Oracle 通过 Exadata 云基础设施 X9M 提供卓越的数据库性能和规模
https://www.modb.pro/db/397202 32个节点的RAC 服务器 每个服务器 两个 64核心的AMD CPU 四个线程干管理 252个线程进行数据库处理 252*32=8064 ...
- UData查询引擎优化-如何让一条SQL性能提升数倍
1 UData-解决数据使用的最后一公里 1.1 背景 在大数据的范畴,我们经历了数据产业化的历程,从各个生产系统将数据收集起来,经过实时和离线的数据处理最终汇集在一起,成为我们的主题域数据,下一步挖 ...
- 人均瑞数系列,瑞数 4 代 JS 逆向分析
声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容.敏感网址.数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未经许 ...
- docker 推送镜像到harbor
服务器A的镜像要推送到已安装harbor的服务器B 1.修改服务器A的/etc/docker/daemon.json文件 其中,http://211.131.241.221:8888为你要推送的服务器 ...
- Go 匿名函数与闭包
Go 匿名函数与闭包 匿名函数和闭包是一些编程语言中的重要概念,它们在Go语言中也有重要的应用.让我们来详细介绍这两个概念,并提供示例代码来帮助理解. 目录 Go 匿名函数与闭包 一.匿名函数(Ano ...
- Spring源码之XML文件中Bean标签的解析1
读取XML文件,创建对象 xml文件里包含Bean的信息,为了避免多次IO,需要一次性读取xml文件中所有bean信息,加入到Spring工厂. 读取配置文件 new ClassPathResourc ...
- 把Unity的日志保存到文件中
Unity的日志事件 Unity提供了两个日志回调API,这两个回调函数的参数都是一样的,通过这个API可以在真机上把Debug.Log/LogWarning/LogError 日志输出到文件中保存, ...
- 人工智能大语言模型微调技术:SFT 监督微调、LoRA 微调方法、P-tuning v2 微调方法、Freeze 监督微调方法
人工智能大语言模型微调技术:SFT 监督微调.LoRA 微调方法.P-tuning v2 微调方法.Freeze 监督微调方法 1.SFT 监督微调 1.1 SFT 监督微调基本概念 SFT(Supe ...
- 8.1 C++ 标准输入输出流
C/C++语言是一种通用的编程语言,具有高效.灵活和可移植等特点.C语言主要用于系统编程,如操作系统.编译器.数据库等:C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统.图形用户界面 ...
- Win10已死!微软发布Windows 11大更新:引入ChatGPT、升级巨大
今天凌晨微软在开发者大会上公布了Windows 11的新版本更新"Moment 3",整体升级幅度非常的大. 新系统的多任务有了改进,现在按下Alt+Tab时,可以显示更多的Edg ...