半个月时间把MySQL重新巩固了一遍,梳理了一篇几万字 “超硬核” 文章!(七)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 半个月时间把MySQL重新巩固了一遍,梳理了一篇几万字 “超硬核” 文章!

27. 查询出只有两门课程的全部学生的学号和姓名

SELECT
  st.s_id,
  st.s_name 
FROM
  student st
  LEFT JOIN score sc ON sc.s_id = st.s_id
  INNER JOIN course c ON c.c_id = sc.c_id 
GROUP BY
  st.s_id 
HAVING
  COUNT( 1 ) = 2

2017f196335f45c4adaef13d14898ce7.png

28. 查询男生、女生人数

SELECT s_sex, COUNT(1) FROM student GROUP BY s_sex


4ff2b38904894a929f6dcd382bc80d0f.png

29. 查询名字中含有"德"字的学生信息

SELECT * FROM student WHERE s_name LIKE '%德%'

32ec816e45cb47f08d55a9d16d41d2d7.png


30. 查询同名同性学生名单,并统计同名人数

select st.s_name,st.s_sex,count(1) from student st group by st.s_name,st.s_sex having cou

47093ceb41164544848e975a1185263b.png


31. 查询1990年出生的学生名单

SELECT st.* FROM student st WHERE st.s_birth LIKE '1990%';


28e1a946195b46d9a19b3fadacb30675.png

32. 查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列

SELECT
  c.c_id,
  c_name,
  AVG( sc.s_score ) AS scoreAvg 
FROM
  course c
  INNER JOIN score sc ON sc.c_id = c.c_id 
GROUP BY
  c.c_id 
ORDER BY
  scoreAvg DESC,
  c.c_id ASC;

24c485125f0449338393c344620d9e81.png

33. 查询平均成绩大于等于85的所有学生的学号、姓名和平均成绩

SELECT
  st.s_id,
  st.s_name,
  ( CASE WHEN AVG( sc.s_score ) IS NULL THEN 0 ELSE AVG( sc.s_score ) END ) scoreAvg 
FROM
  student st
  LEFT JOIN score sc ON sc.s_id = st.s_id 
GROUP BY
  st.s_id 
HAVING
  scoreAvg > '85';

b7278687b5794e7787108972a7fff0cb.png


34. 查询课程名称为"数学",且分数低于60的学生姓名和分数

SELECT
  * 
FROM
  student st
  INNER JOIN score sc ON sc.s_id = st.s_id 
  AND sc.s_score < 60
  INNER JOIN course c ON c.c_id = sc.c_id 
  AND c.c_name = '数学';

abcd5d870ef844258756ac00a1105220.png

35. 查询所有学生的课程及分数情况

SELECT
  * 
FROM
  student st
  LEFT JOIN score sc ON sc.s_id = st.s_id
  LEFT JOIN course c ON c.c_id = sc.c_id 
ORDER BY
  st.s_id,
  c.c_name;

916e023816ed42ea841bf385e7400342.png

36. 查询任何一门课程成绩在70分以上的姓名、课程名称和分数

SELECT
  st.s_id,st.s_name,c.c_name,sc.s_score 
FROM
  student st
  LEFT JOIN score sc ON sc.s_id = st.s_id
  LEFT JOIN course c ON c.c_id = sc.c_id 
WHERE
  st.s_id IN (
  SELECT
    st2.s_id 
  FROM
    student st2
    LEFT JOIN score sc2 ON sc2.s_id = st2.s_id 
  GROUP BY
    st2.s_id 
  HAVING
    MIN( sc2.s_score )>= 70 
  ORDER BY
  st2.s_id 
  )


74de22c390cd43938014f19286fbaa66.png

37. 查询不及格的课程

SELECT
  st.s_id,
  c.c_name,
  st.s_name,
  sc.s_score 
FROM
  student st
  INNER JOIN score sc ON sc.s_id = st.s_id 
  AND sc.s_score < 60
  INNER JOIN course c ON c.c_id = sc.c_id


fba95ee750ed45929c77c000cb710a74.png

38. 查询课程编号为01且课程成绩在80分以上的学生的学号和姓名

SELECT
  st.s_id,
  st.s_name,
  sc.s_score 
FROM
  student st
  INNER JOIN score sc ON sc.s_id = st.s_id 
  AND sc.c_id = '01' 
  AND sc.s_score >= 80;


4422f73d076b4feba28ec86078eb1057.png

39. 求每门课程的学生人数

SELECT
  c.c_id,
  c.c_name,
  COUNT( 1 ) 
FROM
  course c
  INNER JOIN score sc ON sc.c_id = c.c_id 
GROUP BY
  c.c_id;


e58272ef494540dd8ed04aec0a5c03c4.png

40. 查询选修"死亡歌颂者"老师所授课程的学生中,成绩最高的学生信息及其成绩

SELECT
  st.*,
  sc.s_score 
FROM
  student st
  INNER JOIN score sc ON sc.s_id = st.s_id
  INNER JOIN course c ON c.c_id = sc.c_id
  INNER JOIN teacher t ON t.t_id = c.t_id 
  AND t.t_name = '死亡歌颂者' 
ORDER BY
  sc.s_score DESC 
  LIMIT 0,1;

8ca25507a1c043a9bcb2b2fb3407f665.png


41. 查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩

SELECT
  st.s_id,
  st.s_name,
  sc.c_id,
  sc.s_score 
FROM
  student st
  LEFT JOIN score sc ON sc.s_id = st.s_id
  LEFT JOIN course c ON c.c_id = sc.c_id 
WHERE
  (
  SELECT
    COUNT( 1 ) 
  FROM
    student st2
    LEFT JOIN score sc2 ON sc2.s_id = st2.s_id
    LEFT JOIN course c2 ON c2.c_id = sc2.c_id 
  WHERE
    sc.s_score = sc2.s_score 
  AND c.c_id != c2.c_id 
  )>1;

2f8bc9d664b24e92a7de116eda95ffd1.png

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

SELECT
  a.* 
FROM
  (
  SELECT
    st.s_id,
    st.s_name,
    c.c_name,
    sc.s_score 
  FROM
    student st
    LEFT JOIN score sc ON sc.s_id = st.s_id
    INNER JOIN course c ON c.c_id = sc.c_id 
    AND c.c_id = '01' 
  ORDER BY
    sc.s_score DESC 
    LIMIT 0,
    2 
  ) a UNION ALL
SELECT
  b.* 
FROM
  (
  SELECT
    st.s_id,
    st.s_name,
    c.c_name,
    sc.s_score 
  FROM
    student st
    LEFT JOIN score sc ON sc.s_id = st.s_id
    INNER JOIN course c ON c.c_id = sc.c_id 
    AND c.c_id = '02' 
  ORDER BY
    sc.s_score DESC 
    LIMIT 0,
    2 
  ) b UNION ALL
SELECT
  c.* 
FROM
  (
  SELECT
    st.s_id,
    st.s_name,
    c.c_name,
    sc.s_score 
  FROM
    student st
    LEFT JOIN score sc ON sc.s_id = st.s_id
    INNER JOIN course c ON c.c_id = sc.c_id 
    AND c.c_id = '03' 
  ORDER BY
    sc.s_score DESC 
    LIMIT 0,
  2 
  ) c;

effd88d642f54893a2fae58b6900ae1a.png

写法 2

SELECT
  a.s_id,
  a.c_id,
  a.s_score 
FROM
  score a 
WHERE
  ( SELECT COUNT( 1 ) FROM score b WHERE b.c_id = a.c_id AND b.s_score > a.s_score ) <= 2 
ORDER BY
  a.c_id;

d8be49657bfa4828b57896875af9dee4.png


43. 统计每门课程的学生选修人数(超过5人的课程才统计)

  • 要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列
SELECT
  c.c_id,
  COUNT( 1 ) 
FROM
  score sc
  LEFT JOIN course c ON c.c_id = sc.c_id 
GROUP BY
  c.c_id 
HAVING
  COUNT( 1 ) > 5 
ORDER BY
  COUNT( 1 ) DESC,
  c.c_id ASC;

7baa3c0dc97a436c8d77cd0e3c5830ab.png


44. 检索至少选修两门课程的学生学号

SELECT
  st.s_id 
FROM
  student st
  LEFT JOIN score sc ON sc.s_id = st.s_id 
GROUP BY
  st.s_id 
HAVING
  COUNT( 1 )>= 2;

0492f350435f4b98a2e4d51aba6a3d5f.png

45. 查询选修了全部课程的学生信息

SELECT
  st.* 
FROM
  student st
  LEFT JOIN score sc ON sc.s_id = st.s_id 
GROUP BY
  st.s_id 
HAVING
  COUNT( 1 )=(
  SELECT
    COUNT( 1 ) 
FROM
  course)


9a3a8bef835648bd9ba9bf1eff27097f.png

46. 查询各学生的年龄



SELECT
  st.*,
  TIMESTAMPDIFF(
    YEAR,
    st.s_birth,
  NOW()) 
FROM
  student st


ce1c628556a34ed9a98aa9304ff82e68.png

47. 查询本周过生日的学生

SELECT
  st.* 
FROM
  student st 
WHERE
  WEEK (
  NOW())+ 1 = WEEK (
  DATE_FORMAT( st.s_birth, '%Y%m%d' ))


b7a1997fbe954fce98050434c956fa73.png

48. 查询下周过生日的学生

SELECT
  st.* 
FROM
  student st 
WHERE
  WEEK (
    NOW())+ 1 = WEEK (
  DATE_FORMAT( st.s_birth, '%Y%m%d' ));


d62ab74216b44a969917970fcaed62a6.png

49. 查询本月过生日的学生

SELECT
  st.* 
FROM
  student st 
WHERE
  MONTH (
  NOW())= MONTH (
  DATE_FORMAT( st.s_birth, '%Y%m%d' ));


2d5d90ae468b4d00a026627ea5f3891d.png

50. 查询下月过生日的学生

SELECT
  st.* 
FROM
  student st 
WHERE
  MONTH (
    TIMESTAMPADD(
      MONTH,
      1,
    NOW()))= MONTH (
  DATE_FORMAT( st.s_birth, '%Y%m%d' ));


【阿里巴巴开发手册】


f29529ffbb374ff0800ba28a06f59884.png


内容偏向基础适合各个阶段人员的学习与巩固,如果对您还有些帮助希望给博主点个赞


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
存储 SQL 关系型数据库
MySQL阅读网上MySQL文章有感的杂记
MySQL阅读网上MySQL文章有感的杂记
61 0
|
关系型数据库 MySQL Linux
让安装变简单:Linux下安装Mysql一篇文章搞定
让安装变简单:Linux下安装Mysql一篇文章搞定
156 0
|
6月前
|
SQL 关系型数据库 MySQL
一篇文章解析mysql的 行转列(7种方法) 和 列转行
一篇文章解析mysql的 行转列(7种方法) 和 列转行
2008 0
|
2月前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
397 15
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
2月前
|
存储 缓存 关系型数据库
【MySQL调优】如何进行MySQL调优?一篇文章就够了!
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
【MySQL调优】如何进行MySQL调优?一篇文章就够了!
|
6月前
|
SQL 关系型数据库 MySQL
这篇文章带你了解:如何一次性将Centos中Mysql的数据快速导出!!!
这篇文章带你了解:如何一次性将Centos中Mysql的数据快速导出!!!
|
6月前
|
存储 SQL 关系型数据库
【MySQL 数据库】6、一篇文章学习【索引知识】,提高大数据量的查询效率【文末送书】
【MySQL 数据库】6、一篇文章学习【索引知识】,提高大数据量的查询效率【文末送书】
88 0
|
6月前
|
Cloud Native 关系型数据库 MySQL
AnalyticDB MySQL文章汇总
AnalyticDB MySQL文章汇总
79 0
|
SQL 存储 关系型数据库
MySQL的第一篇文章——了解数据库、简单的SQL语句
MySQL的第一篇文章——了解数据库、简单的SQL语句
|
SQL 关系型数据库 MySQL
mybatis-plus代码生成器(+24篇MySql/MyBatis-Plus文章)
mybatis-plus代码生成器(+24篇MySql/MyBatis-Plus文章)
105 0