赞
踩
本文主要记录B站视频链接的 MySQL 数据库练习题,这个老师讲课通俗易懂。
班级表 class:
学生表 student:
成绩表 score:
场景限制:
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逻辑:查询所有的学生分数,学生数据为主,每个学生都有唯一对应的班级数据,实现如下:
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;
运行结果:
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 = '张三');
运行结果:
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;
运行结果:
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
运行结果:
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;
运行结果:
课程表 course:
学生表 student:
成绩表 score:
教师表 teacher
SQL 语句:
SELECT s_no,AVG(score) avg_score
FROM score
GROUP BY s_no
HAVING avg_score > 60;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。