![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
MySQL练习经典45题
练习SQL语句
百里守约学编程
你会的越多,不会的越多。
展开
-
Select子句执行顺序
Select子句中常见的关键字如下表所示子句说明是否必须使用select ⑤要返回的列或表达式是from ①要从中检索数据的表仅在要从表中选择数据时使用where ②行级过滤否group by③分组说明仅在按组计算聚集时使用having ④组级过滤否order by ⑥输出排序顺序否limit ⑦要检索的行数否如果存在连接查询,则最先执行的是连接操作,之后的操作顺序则如表中关键字后面所标出的序号顺序。...原创 2021-04-24 17:25:56 · 408 阅读 · 0 评论 -
数据库与表的建立
文章目录1. 建立数据库2. 建立四张表3.往四张表中分别插入数据4.查看表中数据1. 建立数据库 CREATE DATABASE practice CHARSET=utf8;2. 建立四张表 # 学生表 Student: --S# 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别CREATE TABLE Student( SId VARCHAR(10) , Sname VARCHAR(10), Sage DATETIME, Ssex VARCHAR(10)原创 2021-04-23 21:09:28 · 306 阅读 · 0 评论 -
练习40-45:时间函数,year()、month()、week()、now()、timestampdiff()等
练习40-45:时间函数,year()、month()、week()、now()、timestampdiff()等原创 2022-09-01 01:17:31 · 555 阅读 · 0 评论 -
练习36-39:窗口函数,聚合查询,子查询
练习36-39:窗口函数,聚合查询,子查询原创 2022-09-01 00:51:54 · 182 阅读 · 0 评论 -
练习31-35:多表关联查询、多条件自连接查询、子查询、窗口函数等
练习31-35:多表关联查询、多条件自连接查询、子查询、窗口函数等原创 2022-08-31 00:55:30 · 502 阅读 · 0 评论 -
练习26-30:多表关联查询,子查询
练习26-30:多表关联查询,子查询原创 2022-08-30 23:53:19 · 265 阅读 · 0 评论 -
练习21-25:模糊查询like、多字段自连接查询、year()、left()、substr()等函数
练习21-25:模糊查询like、多字段自连接查询、year()、left()、substr()等函数原创 2022-08-30 23:09:50 · 255 阅读 · 0 评论 -
练习18-20. 窗口函数、distinct聚合、子查询
练习18-20. 窗口函数、distinct聚合、子查询原创 2022-08-30 00:50:18 · 342 阅读 · 0 评论 -
练习17.聚合函数、case when、concat函数
练习17.聚合函数、case when、concat函数原创 2022-08-30 00:27:31 · 316 阅读 · 1 评论 -
16. 查询学生的总成绩,并进行排名,总分重复时保留名次空缺
16. 查询学生的总成绩,并进行排名,总分重复时保留名次空缺原创 2022-08-29 23:50:22 · 2699 阅读 · 0 评论 -
练习15. 窗口函数,RANK、DENSE_RANK、ROW_NUMBER
练习15. 窗口函数,RANK、DENSE_RANK、ROW_NUMBER原创 2022-08-29 23:34:51 · 767 阅读 · 0 评论 -
练习14. 聚合函数、case when...then...else...end
练习14. 聚合函数、case when...then...else...end原创 2022-08-29 23:18:59 · 329 阅读 · 1 评论 -
13. 按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
13. 按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩原创 2022-08-28 00:28:22 · 3995 阅读 · 0 评论 -
12. 检索“01”课程分数小于60,按分数降序排列的学生信息
12. 检索“01”课程分数小于60,按分数降序排列的学生信息原创 2022-08-28 00:16:39 · 1026 阅读 · 0 评论 -
11. 查询两门及以上不及格课程的同学的学号,姓名及其平均成绩
11. 查询两门及以上不及格课程的同学的学号,姓名及其平均成绩原创 2022-08-27 23:18:22 · 7297 阅读 · 0 评论 -
10. 查询没学过“张三”老师教授的任一门课程的学生姓名
10. 查询没学过“张三”老师教授的任一门课程的学生姓名原创 2022-08-27 22:58:39 · 3045 阅读 · 0 评论 -
练习9:逆向思维,多重子查询
练习9:逆向思维,多重子查询原创 2022-08-27 22:34:21 · 118 阅读 · 0 评论 -
练习8:多重子查询
多重子查询原创 2022-08-27 21:02:18 · 250 阅读 · 0 评论 -
练习7:去重聚合、子查询作为having条件、关联查询
练习7:去重聚合、子查询作为having条件、关联查询原创 2022-08-27 19:44:53 · 92 阅读 · 0 评论 -
练习6:多表关联查询、嵌套子查询
6. 查询学过「张三」老师授课的同学的信息关键词分析: 学过、张三老师、同学信息第一步: 锁定表,我们发现需要查询所有的四张表,各表使用的地方分别在后续步骤中一一说明。第二步: 从teacher表查出张三老师对应的TId,即第一步图中的1。SELECT TId FROM teacher WHERE Tname = '张三';第三步: 根据TId我们便可以从course表中查出张三老师教过哪些课的课程CId,即第一步中的图2,注意这里用的in而不是=,因为名字叫张三的老师可能有多个。SELE原创 2021-04-24 19:08:29 · 701 阅读 · 0 评论 -
练习5:模糊匹配、聚合函数、like关键字
5. 查询「李」姓老师的数量关键词分析: “李”姓、老师、数量第一步: 锁定表为老师表teacher。第二步: 可以先看下“李”姓的老师有哪些,即查询Tname字段中以“李”开头的记录是哪些,用到like关键字。%:表示匹配任意多个字符_: 表示匹配任意一个字符既没有用%,也没有用_,则表示需要精确匹配SELECT * FROM teacher WHERE Tname LIKE '李%';第三步: 用聚合函数count统计共有多少条记录即可。SELECT COUNT(*) F原创 2021-04-24 17:47:33 · 230 阅读 · 0 评论 -
练习4:左外连接、子查询、聚合函数
4. 查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 null )关键词分析: 学生编号、学生姓名、选课总数、所有课程总成绩第一步: 根据关键词锁定要查询的表为学生表student与成绩表sc。第二步: 不访先查出所有学生的编号以及姓名,如下:SELECT Sid,Sname FROM student;第三步: 利用Sid字段进行聚合,查出sc表中每个学生学习的课程总数以及总成绩。SELECT Sid,COUNT(Cid),SUM(score) FROM sc原创 2021-04-24 17:10:29 · 974 阅读 · 0 评论 -
练习3:distinct关键字去重、子查询、in关键字
3. 查询在 SC 表存在成绩的学生信息关键词分析: sc表中存在成绩、学生信息第一步: 锁定表为sc表和student表。第二步: 我们可以先用Sid查出到底sc表中包含了哪些学生的成绩信息,注意用distinct关键字去重。SELECT DISTINCT Sid FROM sc ;第三步: 既然现在已经知道了哪些Sid的学生在sc表中有成绩,那么就只需要去student学生表中查出这些Sid对应的学生信息就行了,用in关键字即可。SELECT * FROM student原创 2021-04-24 16:06:49 · 284 阅读 · 0 评论 -
练习2:分组查询、聚合函数、关联查询、子查询
2. 查询平均成绩大于等于 60 分的同学的学生编号和学生姓名以及平均成绩分析关键词: 学生编号,学生姓名,学生平均成绩 >= 60第一步: 锁定表,Student(学生表),sc(成绩表),因为这两个表包含了所需查询的所有信息。第二步: 根据成绩表中的SId字段进行聚合,查出平均分大于等于60分的所有同学的SId和scoreSELECT SId, AVG(score) AS avg_score FROM sc GROUP BY SId HAVING avg_score >= 60;原创 2021-04-24 15:42:48 · 398 阅读 · 0 评论 -
练习1.3:子查询、in / not in关键字
1.3 查询不存在" 01 “课程但存在” 02 "课程的情况题意分析:题目是想让我们查出学习了02课程但没有学习01课程的学生成绩信息第一步: 确定表。SC表(成绩表)第二步: 查出哪些学生学了02课程但没有学习01课程。如果我们写成如下这样,肯定是错误的 SELECT * FROM sc WHERE cid = 02;错误原因:查询结果中确实只显示了02课程,没有01课程,但是SId为01(或者其他学号)的学生到底有没有学习01课程,我们并不知道,可能学了呢,此时我们结果表中就不应该有S原创 2021-04-24 15:06:44 · 787 阅读 · 0 评论 -
练习1.2:左外连接与内连接的区别,连接时条件写在on和where中的差异,需要注意!!!
1.2 查询存在" 01 “课程但可能不存在” 02 "课程的情况(不存在时显示为 null )分析:乍一看,和练习1.1很相似,把内连接改成左外连接就行了单纯把练习1.1中内连接改为左外连接,结果如下:SELECT a.*, b.`CId`, b.`score`FROM sc a LEFT JOIN sc b ON a.`SId` = b.`SId` AND a.CId = 01 AND b.`CId` = 02 ;为什么会出现上图的情况原创 2021-04-24 14:43:26 · 228 阅读 · 0 评论 -
练习1.1:自关联查询
1.1 查询同时存在" 01 “课程和” 02 "课程的情况关键词分析:01课程,02课程第一步: 确定要查询的表为成绩表,因为成绩表中包含了课程编号和成绩,题目的意思就是要我们把一个学生的01课程成绩和02课程成绩放在同一行第二步: 将sc表进行自关联查询便可以让01课程和02课程出现在同一行了SELECT * FROM sc a INNER JOIN sc b ON a.`SId` = b.`SId`;续上图为了更好的理解关联查询,所以这里解释一下为什么结果是48行,我们先看一下成绩原创 2021-04-24 14:20:15 · 710 阅读 · 0 评论 -
练习1:关联查询、自关联查询
1.查询" 01 “课程比” 02 "课程成绩高的学生的信息及课程分数分析关键词:学生信息,课程编号,课程分数第一步: 锁定要查询的表为学生表、成绩表,这两张表包含了题目所要查询的所有信息。第二步: 将两张表进行关联查询SELECT * FROM Student st INNER JOIN sc a ON st.`SId` = a.SId;第三步: 利用第二步的结果继续和成绩表关联查询,关联字段仍然是SId,但注意要筛选一下课程,我们让左边的表只保留01课程,右边的表只保留02课程SELE原创 2021-04-23 22:04:35 · 180 阅读 · 0 评论