mysql题目实战2

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
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


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
15天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
81 1
|
21天前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:优化百万数据查询的实战经验
【10月更文挑战第13天】 在处理大规模数据集时,传统的关系型数据库如MySQL可能会遇到性能瓶颈。为了提升数据处理的效率,我们可以结合使用MySQL和Redis,利用两者的优势来优化数据查询。本文将分享一次实战经验,探讨如何通过MySQL与Redis的协同工作来优化百万级数据统计。
48 5
|
1月前
|
架构师 关系型数据库 MySQL
MySQL最左前缀优化原则:深入解析与实战应用
【10月更文挑战第12天】在数据库架构设计与优化中,索引的使用是提升查询性能的关键手段之一。其中,MySQL的最左前缀优化原则(Leftmost Prefix Principle)是复合索引(Composite Index)应用中的核心策略。作为资深架构师,深入理解并掌握这一原则,对于平衡数据库性能与维护成本至关重要。本文将详细解读最左前缀优化原则的功能特点、业务场景、优缺点、底层原理,并通过Java示例展示其实现方式。
68 1
|
16天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
47 0
|
2月前
|
监控 关系型数据库 MySQL
zabbix agent集成percona监控MySQL的插件实战案例
这篇文章是关于如何使用Percona监控插件集成Zabbix agent来监控MySQL的实战案例。
53 2
zabbix agent集成percona监控MySQL的插件实战案例
|
3月前
|
SQL 关系型数据库 MySQL
干货!python与MySQL数据库的交互实战
干货!python与MySQL数据库的交互实战
|
3月前
|
存储 关系型数据库 MySQL
实战!MySQL主从复制一键搭建脚本分享
实战!MySQL主从复制一键搭建脚本分享
68 2
|
3月前
|
SQL 存储 关系型数据库
MySQL备份:mydumper 备份恢复工具生产实战
MySQL备份:mydumper 备份恢复工具生产实战
|
3月前
|
关系型数据库 MySQL Linux
【一键解锁神秘力量!】CentOS 7 通过编译源码方式安装 MySQL 数据库 —— 从零到英雄的数据库安装实战秘籍!
【8月更文挑战第9天】随着业务增长,对数据库的需求日益提高。在 CentOS 7 中,通过编译源码安装 MySQL 可提供更高定制性和灵活性。本文详细介绍从准备环境、下载源码、配置编译参数到安装 MySQL 的全过程,并对比 RPM 包安装方法,帮助读者根据需求选择合适方案。实践时需注意备份数据、选择合适版本、确保安全性和调优性能等要点。
217 1
|
3月前
|
存储 关系型数据库 MySQL
MySQL数据库进阶实战:解锁性能飙升秘籍,从菜鸟到高手的华丽蜕变,让数据操作如行云流水!
【8月更文挑战第5天】MySQL是最流行的开源关系型数据库之一,在Web开发与数据分析等领域广泛应用。本文通过实战代码示例,深入探讨MySQL进阶技能:包括索引优化以提升查询性能;利用JOIN与子查询处理多表关联数据;通过事务处理确保数据一致性;使用存储过程与函数封装复杂逻辑以便重用;设置触发器自动执行特定任务以维护数据完整性。掌握这些技能能显著提高数据处理效率与系统性能。
86 5