15000 字的 MySQL 速查手册 中

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 15000 字的 MySQL 速查手册 中

3.复杂查询

查询所有课程成绩小于60分学生的学号、姓名

【知识点】子查询

1.翻译成大白话

1)查询结果:学生学号,姓名 2)查询条件:所有课程成绩 < 60 的学生,需要从成绩表里查找,用到子查询

第1步,写子查询(所有课程成绩 < 60 的学生)

select 查询结果[学号]

from 从哪张表中查找数据[成绩表:score]

where 查询条件[成绩 < 60]

group by 分组[没有]

having 对分组结果指定条件[没有]

order by 对查询结果排序[没有]

limit 从查询结果中取出指定行[没有];

select 学号 
from score
where 成绩 < 60;

第2步,查询结果:学生学号,姓名,条件是前面1步查到的学号

select 查询结果[学号,姓名]

from 从哪张表中查找数据[学生表:student]

where 查询条件[用到运算符in]

group by 分组[没有]

having 对分组结果指定条件[没有]

order by 对查询结果排序[没有]

limit 从查询结果中取出指定行[没有];

select 学号,姓名
from student
where  学号 in (
select 学号 
from score
where 成绩 < 60
);

查询没有学全所有课的学生的学号、姓名

/*
查找出学号,条件:没有学全所有课,也就是该学生选修的课程数 < 总的课程数
【考察知识点】in,子查询
*/
select 学号,姓名
from student
where 学号 in(
select 学号 
from score
group by 学号
having count(课程号) < (select count(课程号) from course)
);

查询出只选修了两门课程的全部学生的学号和姓名

select 学号,姓名
from student
where 学号 in(
select 学号
from score
group by 学号
having count(课程号)=2
);

1990年出生的学生名单

ffb2c818d7f9a295fdbf984f95ce878.jpg

/*
查找1990年出生的学生名单
学生表中出生日期列的类型是datetime
*/
select 学号,姓名 
from student 
where year(出生日期)=1990; 

查询各科成绩前两名的记录

这类问题其实就是常见的:分组取每组最大值、最小值,每组最大的N条(top N)记录。

sql面试题:topN问题

工作中会经常遇到这样的业务问题:

如何找到每个类别下用户最喜欢的产品是哪个?

如果找到每个类别下用户点击最多的5个商品是什么?

这类问题其实就是常见的:分组取每组最大值、最小值,每组最大的N条(top N)记录。

面对该类问题,如何解决呢?

下面我们通过成绩表的例子来给出答案。

成绩表是学生的成绩,里面有学号(学生的学号),课程号(学生选修课程的课程号),成绩(学生选修该课程取得的成绩)

d9106c9b2eb29fc5609fbc5fe7de832.jpg

分组取每组最大值

案例:按课程号分组取成绩最大值所在行的数据

我们可以使用分组(group by)和汇总函数得到每个组里的一个值(最大值,最小值,平均值等)。但是无法得到成绩最大值所在行的数据。

select 课程号,max(成绩) as 最大成绩
from score 
group by 课程号;

7cf464524dd967ce8957a3f7e84f94f.jpg

我们可以使用关联子查询来实现:

select * 
from score as a 
where 成绩 = (
select min(成绩) 
from score as b 
where b.课程号 = a.课程号);

e392e74eceb179ac7c7c307e5d7a793.jpg

每组最大的N条记录

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
存储 SQL 关系型数据库
Mysql学习手册(第一部分)
【5月更文挑战第17天】Mysql学习手册(第一部分)
71 0
|
6月前
|
存储 SQL 关系型数据库
MySQL学习手册(第一部分)
mysql日常使用记录
142 0
|
11月前
|
关系型数据库 MySQL 数据库
史上最全的MySQL性能手册(优化+SQL+并发+数据库)
史上最全的MySQL性能手册(优化+SQL+并发+数据库)
|
JSON 安全 关系型数据库
MySQL 8.0 参考手册— 内置函数和运算符参考
MySQL 8.0 参考手册— 内置函数和运算符参考
89 0
|
存储 关系型数据库 MySQL
MySQL手册 2
MySQL手册
108 1
|
存储 关系型数据库 MySQL
MySQL手册 3
MySQL手册
|
关系型数据库 MySQL
Github上标星68.5K,阿里巴巴《MySQL成长手册》火了
MySQL为什么能如此火爆? 成本,MySQL是开源的,他可以免费使用。 性能,MySQL快不快大家应该都有体会。 可靠性,超级大厂都在用它来处理重要数据,放心用就行; 简单,安装使用都非常简单
|
存储 SQL 关系型数据库
MD牛!阿里多位资深MySQL专家撰写的437页MySQL技术内幕分享手册
MySQL数据库的体系结构 MySQL由以下几部分组成: 连接池组件 管理服务和工具组件 SQL接口组件 查询分析器组件 优化器组件 缓冲(Cache)组件 插件式存储引擎 物理文件
83 0
|
SQL 存储 关系型数据库
MySQL手册 4
MySQL手册
146 0
|
SQL 关系型数据库 MySQL
MySQL手册 1
MySQL手册
216 0