文章目录
- 前言
- 一、数据库练习题一
- 1.1 表结构
- 1.2 查询所有学生的信息(学号,姓名,性别,班级名称)
- 1.3 查询所有人(包括没有成绩的学生)的课程分数(学号,姓名,性别,班级名称,语文分数,数学分数)
- 1.4 查询语文分数比张三高的学生(包括没有成绩的学生)的课程分数(学号,姓名,性别,班级名称,语文分数)
- 1.5 查询各科成绩都合格(分数 >= 60)的学生(包括没有成绩的学生)的课程分数(学号,姓名,语文分数,数学分数)
- 1.6 查询所有班级的人数(若没有人,人数显示为0)
- 1.7 查询班级人数 >= 2的班级(班级编号,班级名称,人数)
- 二、数据库练习题二
- 2.1 TODO
前言
本文主要记录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
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.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;
运行结果: