MySQL 数据库练习题记录01

前言

本文主要记录B站视频链接的 MySQL 数据库练习题,这个老师讲课通俗易懂。

一、数据库练习题一

1.1 表结构

班级表 class:

在这里插入图片描述
学生表 student:

在这里插入图片描述
成绩表 score:

在这里插入图片描述
场景限制:

1.一个班级有多名学生,一名学生只属于一个班级
2.学生有可能没有成绩

1.2 查询所有学生的信息(学号,姓名,性别,班级名称)

SQL 语句:

#查询的字段来自学生表student 和 班级表class这两表通过student的class_id相连接。
SELECT stu_no,stu_name,stu_gender,class_name
FROM student stu
JOIN class cla
ON stu.class_id = cla.id

运行结果:

在这里插入图片描述

1.3 查询所有人(包括没有成绩的学生)的课程分数(学号,姓名,性别,班级名称,语文分数,数学分数)

本题中需要学生数据和成绩数据进行外连接查询,学生数据和班级数据需要进行内连接查询。sql逻辑:查询所有的学生分数,学生数据为主,每个学生都有唯一对应的班级数据,实现如下:
1.查询出所有学生的信息以及班级信息 – join 此时产生中间表,即执行一次查询。
2.拿上次的查询结果与score表进行外连接 --left/right join 又执行了一次查询

标准多表联查:
select...from A join B join C on xx = xx and xx = xx  执行一次查询(效率高,不会产生中间表)
select...from A join B on xx = xx join C on xx = xx 执行了两次查询(效率低,产生中间表)

SQL 语句:

SELECT stu_no,stu_name,stu_gender,class_name,sco.chinese,sco.math
FROM student stu
JOIN class cla
ON stu.class_id = cla.id
LEFT JOIN score sco
ON stu.id = sco.stu_id;

运行结果:

在这里插入图片描述

1.4 查询语文分数比张三高的学生(包括没有成绩的学生)的课程分数(学号,姓名,性别,班级名称,语文分数)

SQL 语句:

SELECT stu_no,stu_name,stu_gender,class_name,chinese
FROM student stu
JOIN class cla
JOIN score sco
ON stu.class_id = cla.id
AND stu.id = sco.stu_id
WHERE chinese > (SELECT chinese FROM student s JOIN score sc ON s.id = sc.stu_id WHERE stu_name = '张三');

运行结果:

在这里插入图片描述

1.5 查询各科成绩都合格(分数 >= 60)的学生(包括没有成绩的学生)的课程分数(学号,姓名,语文分数,数学分数)

SQL 语句:

SELECT stu_no,stu_name,chinese,math 
FROM student s
JOIN score sc
ON s.id = sc.stu_id
WHERE chinese >= 60 AND math >= 60;

运行结果:

在这里插入图片描述

1.6 查询所有班级的人数(若没有人,人数显示为0)

SQL 语句:

SELECT c.id,class_name,COUNT(stu_no) 
FROM class c 
LEFT JOIN student s 
ON c.id = s.class_id  
GROUP BY c.id

运行结果:

在这里插入图片描述

1.7 查询班级人数 >= 2的班级(班级编号,班级名称,人数)

SQL 语句:

SELECT class_id,class_name,COUNT(stu_no) num 
FROM student s 
JOIN class c 
ON s.class_id = c.id 
GROUP BY class_id
HAVING num >= 2;

运行结果:

在这里插入图片描述

二、数据库练习题二

2.1 表结构

课程表 course:
在这里插入图片描述
学生表 student:
在这里插入图片描述
成绩表 score:
在这里插入图片描述
教师表 teacher
在这里插入图片描述

2.2 查询课程1的成绩比课程2的成绩高的所有学生的信息

2.3 查询平均成绩大于60分的同学的学号和平均成绩

SQL 语句:

SELECT s_no,AVG(score) avg_score 
FROM score 
GROUP BY s_no 
HAVING avg_score > 60;

2.4 查询学过李四老师所教所有课程的所有同学的学号,姓名

2.5 查询姓李的老师的个数

2.6 查询每门课程的选修人数(课程名称,学生数量)–存在没有人选的课程

2.7 删除“1002”同学的“1"课程的成绩

2.8 查询选修人数最多的课程 (课程id,课程名称,学生数量)

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值