mysql题目实战2

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: mysql题目实战2

公众号merlinsea


  • 题目描述:查询评价成绩大于等于60分的学生编号、学生姓名和学生成绩


select stu.sid,stu.sname,sc1.cid,sc1.score,tmp.avg_score
from student stu
inner join(
    -- 因为是按sid作为分组,而这个分组只有唯一的一个平均分,因此可以sid和avg(score)同时出现
  select sid,avg(score) as avg_score
  from sc
  group by sid
  ) as tmp
on stu.sid = tmp.sid
inner join sc sc1 
on sc1.sid = stu.sid
where sc1.score >= tmp.avg_score;

640.jpg

  • 使用group by的注意事项
  • 注意group by sid 以后相同的sid只会出现一次,虽然一个sid有多个score,但也只会出现第一个socre

select sid,score,avg(score) as avg_score from sc group by sid

640.jpg


  • 题目描述:查询sc表存在成绩的学生信息
  • 注意可以通过group by去重
select student.*
from sc
inner join student
on sc.sid = student.sid
-- group by 可以进行去重复
group by sc.sid;
select student.*
from (
-- 先把有成绩的学生信息通过group by进行去重,得到的sid都是有成绩的学生id
  select sid from sc group by sid
) sc_tmp 
left join Student
on sc_tmp.sid = student.sid

640.jpg


  • 题目描述:查询所有同学的学生编号,学生姓名,选课总数,所有课程的总成绩(没有则显示null)
  • 思路1:先找出有成绩的学生,找出没有成绩的学生,通过union进行联合
-- 已选课程的同学
select s.sid,s.sname,COUNT(s.sid) as total_count,SUM(c.score) as total_score
from student s
inner join sc c
on s.sid = c.sid
group by s.sid
union
-- 没选课程的同学
select s.sid,s.sname,0 as total_count, null as total_score
from student s
where s.sid not in( select distinct sc.sid from sc)


  • 思路2:
    对sc表先按sid进行聚合处理,处理完以后用student和聚合处理后的sc表进行左连接left join
select stu.sid,stu.sname,tmp.total_count,tmp.total_score
from Student stu
left join(
  -- 对sc表先按sid进行聚合,第二步用student和聚合的结果进行左连接
  select sid, count(sid) as total_count,sum(score) as total_score
  from sc
  group by sc.sid) tmp
on stu.sid = tmp.sid;

640.jpg

  • 题目描述:查询有成绩的学生信息
  • 思路:成绩表sc表作为主表来left join student表,注意通过group by去重
select s.*
from sc c
inner join student s
on c.sid = s.sid
-- 不增加group by会有很多重复的结果
group by s.sid;


  • 思路: 先对sc表进行过滤去重,然后驱虫后的结果left join 学生表
select s.*
from(
  select sid
  from sc
  group by sid) tmp
left join student s
on tmp.sid = s.sid;

640.jpg

  • 题目描述:统计李姓老师的数量
select count(*) as 李姓老师数量
from Teacher t
where t.Tname like '李%'
  • 题目描述:查询学过张三老师授课的学生信息
-- 找到学生信息
select student.*
from student
where student.sid in(
  -- 找到选修了张三老师教授课的学生编号
  select sc.sid
  from sc
  where sc.cid in(
    -- 找到张三老师教的课程编号
    select course.cid
    from Course
    where course.tid in(
      -- 找到张三老师的教师编号
      select tid
      from Teacher
      where tname = '张三'
    )
  )
);


  • 题目描述:查询没有学全所有课程的学生信息
  • 第1步:查询一共有多少门课程
  • 第2步:
    查询学生课程关系表按学生分组以后每个学生学了几门课程
  • 第3步:
    过滤出第2步中不等于第1步中课程数的结果
  • 第4步:最后查询学生信息表
-- 选了课程但没有选全的
select student.*
from student
inner join(
  select sc.sid,count(sc.sid) as cnt 
  from sc
  group by sc.sid
  -- 这里要用having来过滤而不能用where过滤
  having cnt != (select count(*) as cnt from course)
) tmp 
on student.sid = tmp.sid
union
-- 一门课程都没选的
select student.*
from student
where student.sid not in(
  select sid from sc group by sid
)

640.jpg

  • 题目描述:查询至少有一门课与01同学所学相同的学生信息
select student.*
from student
where student.sid in(
  select sc.sid
  from sc
  where sc.cid in(
    select distinct sc.cid
    from sc
    where sc.sid = '01'
  ) and sc.sid != '01'
)

640.jpg


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
21天前
|
SQL 存储 关系型数据库
不允许你不知道的 MySQL 优化实战(三)
不允许你不知道的 MySQL 优化实战(三)
31 1
|
21天前
|
关系型数据库 MySQL
【MySQL实战笔记】07 | 行锁功过:怎么减少行锁对性能的影响?-01
【4月更文挑战第18天】MySQL的InnoDB引擎支持行锁,而MyISAM只支持表锁。行锁在事务开始时添加,事务结束时释放,遵循两阶段锁协议。为减少锁冲突影响并发,应将可能导致最大冲突的锁操作放在事务最后。例如,在电影票交易中,应将更新影院账户余额的操作安排在事务末尾,以缩短锁住关键行的时间,提高系统并发性能。
21 4
|
21天前
|
关系型数据库 MySQL 数据库
【MySQL实战笔记】 06 | 全局锁和表锁 :给表加个字段怎么有这么多阻碍?-01
【4月更文挑战第17天】MySQL的锁分为全局锁、表级锁和行锁。全局锁用于全库备份,可能导致业务暂停或主从延迟。不加锁备份会导致逻辑不一致。推荐使用`FTWRL`而非`readonly=true`因后者可能影响其他逻辑且异常处理不同。表级锁如`lock tables`限制读写并限定操作对象,常用于并发控制。元数据锁(MDL)在访问表时自动加锁,确保读写正确性。
73 31
|
21天前
|
存储 关系型数据库 MySQL
【MySQL实战笔记】 04 | 深入浅出索引(上)-01
【4月更文挑战第8天】这篇文章除了介绍索引的作用和提高查询效率的原理,还探讨了三种常见的数据结构:哈希表、有序数组和搜索树。哈希表适合等值查询,但不支持范围查询;有序数组利用二分查找实现快速等值查询,但更新成本高;二叉搜索树保持平衡时查询高效,但磁盘存储时效率低。文章指出,由于磁盘读取延迟,实际数据库索引设计需考虑减少磁盘访问次数。
37 5
|
21天前
|
SQL 关系型数据库 MySQL
【MySQL实战笔记】02.一条SQL更新语句是如何执行的-1
【4月更文挑战第4天】SQL更新语句执行涉及查询和日志模块,主要为`redo log`和`binlog`。`redo log`先写日志再写磁盘,保证`crash-safe`;`binlog`记录逻辑日志,支持所有引擎,且追加写入。执行过程分为执行器查找数据、更新内存和`redo log`(prepare状态)、写入`binlog`、提交事务(`redo log`转commit)。两阶段提交确保日志逻辑一致,支持数据库恢复至任意时间点。
23 0
|
21天前
|
SQL 关系型数据库 MySQL
不允许你不知道的 MySQL 优化实战(二)
不允许你不知道的 MySQL 优化实战(二)
31 2
|
21天前
|
SQL 安全 关系型数据库
【MySQL实战笔记】03.事务隔离:为什么你改了我还看不见?-01
【4月更文挑战第6天】MySQL事务的隔离性确保数据操作的完整性和一致性,ACID原则包括原子性、一致性、隔离性和持久性。事务隔离级别有四种:读未提交、读提交、可重复读和串行化,分别解决并发问题如脏读、不可重复读和幻读。不同隔离级别在效率和安全性间权衡,例如读未提交允许未提交变更可见,而串行化通过锁保证安全但可能降低效率。在不同隔离级别下,事务看到的数据状态会有所变化,例如在可重复读级别,事务始终看到初始数据,而在串行化级别,事务会等待其他事务完成再继续,避免数据冲突。
281 10
|
1天前
|
存储 关系型数据库 MySQL
MySQL触发器实战:自动执行的秘密
MySQL触发器实战:自动执行的秘密
22 3
|
13天前
|
SQL 关系型数据库 数据库
阿里云数据库 RDS SQL Server版实战【性能优化实践、优点探析】
本文探讨了Amazon RDS SQL Server版在云数据库中的优势,包括高可用性、可扩展性、管理便捷、安全性和成本效益。通过多可用区部署和自动备份,RDS确保数据安全和持久性,并支持自动扩展以适应流量波动。可视化管理界面简化了监控和操作,而数据加密和访问控制等功能保障了安全性。此外,弹性计费模式降低了运维成本。实战应用显示,RDS SQL Server版能有效助力企业在促销高峰期稳定系统并保障数据安全。阿里云的RDS SQL Server版还提供了弹性伸缩、自动备份恢复、安全性和高可用性功能,进一步优化性能和成本控制,并与AWS生态系统无缝集成,支持多种开发语言和框架。
66 2
|
21天前
|
缓存 关系型数据库 MySQL
MySQL数据库性能优化实战
【4月更文挑战第30天】本文探讨了MySQL性能优化实战技巧,包括硬件与配置优化(如使用SSD、增加内存和调整配置参数)、索引优化(创建合适索引、使用复合索引及定期维护)、查询优化(避免全表扫描、减少JOIN和使用LIMIT)、分区与分片(表分区和数据库分片),以及使用缓存、定期清理数据库和监控诊断。通过这些方法,可以提升数据库性能和响应速度。