🏘️🏘️个人简介:以山河作礼。
🎖️🎖️:Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主,CSDN内容合伙人
🎁🎁:文章末尾扫描二维码可以加入粉丝交流群,不定期免费送书。
环境
MySQL版本: 8.0.28
数据库管理工具:MySQL Workbench 8.0 CE
MySQL Workbench 8.0 CE是一款开源的、跨平台的、图形化的MySQL数据库管理工具,由MySQL AB公司开发。它提供了一个集成的开发环境,包括数据库设计、SQL开发、数据库管理和数据库维护等功能
mysql经典50习题
数据库数据:
1.学生表
-- Student(SID,Sname,Sage,Ssex)
-- --SID 学生编号,Sname 学生姓名,Sage 年龄,Ssex 学生性别
-- CREATE TABLE Student(
-- Sid VARCHAR(20),
-- Sname VARCHAR(20) NOT NULL DEFAULT '',
-- Sage VARCHAR(20) NOT NULL DEFAULT '',
-- Ssex VARCHAR(10) NOT NULL DEFAULT '',
-- PRIMARY KEY(Sid)
-- );
-- insert into Student values('01' , ' 赵 雷 ' , '1990-01-01' , ' 男 ');
-- insert into Student values('02' , ' 钱 电 ' , '1990-12-21' , ' 男 ');
-- insert into Student values('03' , ' 孙 风 ' , '1990-05-20' , ' 男 ');
-- insert into Student values('04' , ' 李 云 ' , '1990-08-06' , ' 男 ');
-- insert into Student values('05' , ' 周 梅 ' , '1991-12-01' , ' 女 ');
-- insert into Student values('06' , ' 吴 兰 ' , '1992-03-01' , ' 女 ');
-- insert into Student values('07' , ' 郑 竹 ' , '1989-07-01' , ' 女 ');
-- insert into Student values('08' , ' 王 菊 ' , '1990-01-20' , ' 女 ');
2.课程表
-- create table Course(Cid int primary key auto_increment,Cname char(20),Tid int);
-- insert into Course(Cid,Cname,Tid) values(1,'语文',2),(2,'数学',1),(3,'英语',3);
3.教师表
-- Teacher(Tid,Tname)
-- Tid 教师编号,Tname 教师姓名
-- create table Teacher(Tid int primary key auto_increment,Tname char(20));
-- insert into Teacher(Tid,Tname) values(1,'张三'),(2,'李四'),(3,'王五');
4.成绩表
-- Score(Sid,Cid,score)
-- --Sid 学生编号,Cid 课程编号,score 分数
-- CREATE TABLE Score (
-- Sid INT NOT NULL,
-- Cid INT NOT NULL,
-- score INT,
-- PRIMARY KEY (Sid, Cid)
-- );
-- insert into Score values('01' , '01' , 80);
-- insert into Score values('01' , '02' , 90);
-- insert into Score values('01' , '03' , 99);
-- insert into Score values('02' , '01' , 70);
-- insert into Score values('02' , '02' , 60);
-- insert into Score values('02' , '03' , 80);
-- insert into Score values('03' , '01' , 80);
-- insert into Score values('03' , '02' , 80);
-- insert into Score values('03' , '03' , 80);
-- insert into Score values('04' , '01' , 50);
-- insert into Score values('04' , '02' , 30);
-- insert into Score values('04' , '03' , 20);
-- insert into Score values('05' , '01' , 76);
-- insert into Score values('05' , '02' , 87);
-- insert into Score values('06' , '01' , 31);
-- insert into Score values('06' , '03' , 34);
-- insert into Score values('07' , '02' , 89);
-- insert into Score values('07' , '03' , 98);
1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数
-- select s.*,s1.score as s_score1,s2.score as s_score2
-- from Student s
-- join Score s1 on s.Sid = s1.Sid and s1.Cid =1
-- left join Score s2 on s.Sid = s2.Sid and s2.Cid = 2
-- where s1.score>s2.score;
使用了多表连接和条件筛选,目的是查询学生的基本信息和他们在语文和数学两门课中的成绩,并且只返回语文成绩高于数学成绩的学生信息。
- SELECT:选择需要返回的列,这里选择了学生表中的所有列,以及两个成绩表中的score列(分别用别名s_score1和s_score2表示)。
- FROM:指定需要查询的表,这里是学生表和成绩表。
- JOIN:连接两个表,这里是学生表和语文成绩表。
- ON:指定连接条件,这里是学生表中的学生编号和成绩表中的学生编号相等,并且成绩表中的课程编号为1。
- LEFT JOIN:连接学生表和数学成绩表,这里使用左连接,因为不是所有学生都有数学成绩。
- WHERE:筛选符合条件的行,这里是只返回语文成绩高于数学成绩的学生信息,即s1.score>s2.score。
2、查询"01"课程比"02"课程成绩低的学生的信息及课程分数
-- select s.*,s1.score as s_score1,s2.score as s_score2
-- from Student s
-- join Score s1 on s.Sid = s1.Sid and s1.Cid =1
-- left join Score s2 on s.Sid = s2.Sid and s2.Cid = 2
-- where s1.score<s2.score;
- SELECT:选择需要返回的列,这里选择了学生表中的所有列,以及两个成绩表中的score列(分别用别名s_score1和s_score2表示)。
- FROM:指定需要查询的表,这里是学生表和成绩表。
- JOIN:连接两个表,这里是学生表和语文成绩表。
- ON:指定连接条件,这里是学生表中的学生编号和成绩表中的学生编号相等,并且成绩表中的课程编号为1。
- LEFT JOIN:连接学生表和数学成绩表,这里使用左连接,因为不是所有学生都有数学成绩。
- WHERE:筛选符合条件的行,这里是只返回语文成绩低于数学成绩的学生信息,即s1.score<s2.score。
3、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩
-- select distinct(sc.Sid),st.Sname from Score sc join Student st on sc.Sid = st.Sid
-- where sc.Sid in(select Sid from Score group by Sid having avg(score)>60);
- SELECT:选择需要返回的列,这里选择了成绩表中的学生编号和学生表中的学生姓名。
- DISTINCT:去重,保证每个学生只出现一次。
- FROM:指定需要查询的表,这里是成绩表和学生表。
- JOIN:连接两个表,这里是成绩表和学生表。
- ON:指定连接条件,这里是成绩表中的学生编号和学生表中的学生编号相等。
- WHERE:筛选符合条件的行,这里是只返回平均成绩高于60分的学生的信息。
- IN:子查询,用于查询平均成绩高于60分的学生的学号。
- GROUP BY:将成绩表按学生编号分组,用于计算每个学生的平均成绩。
- HAVING:筛选符合条件的分组,这里是只返回平均成绩高于60分的学生的学号。
- AVG:计算平均成绩。
4、查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩(包括有成绩的和无成绩的)
-- select sc.Sid,st.Sname from Score sc join Student st on sc.Sid = st.Sid
-- where sc.Sid=(select Sid from Score group by Sid having avg(score)<60);
-
SELECT:选择需要返回的列,这里选择了成绩表中的学生编号和学生表中的学生姓名。
-
FROM:指定需要查询的表,这里是成绩表和学生表。
-
JOIN:连接两个表,这里是成绩表和学生表。
-
ON:指定连接条件,这里是成绩表中的学生编号和学生表中的学生编号相等。
-
WHERE:筛选符合条件的行,这里是只返回平均成绩低于60分的学生的信息。
-
IN:子查询,用于查询平均成绩低于60分的学生的学号。
-
GROUP BY:将成绩表按学生编号分组,用于计算每个学生的平均成绩。
-
HAVING:筛选符合条件的分组,这里是只返回平均成绩低于60分的学生的学号。文章来源:https://www.toymoban.com/news/detail-527185.html
-
AVG:计算平均成绩。文章来源地址https://www.toymoban.com/news/detail-527185.html
5、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
-- select st.Sid,st.Sname,count(sc.Cid),sum(sc.score) from Student st left join Score sc
-- on sc.Sid = st.Sid group by Sid;
- SELECT:选择需要返回的列,这里选择了学生表中的学生编号和姓名,以及成绩表中的课程编号和成绩。
- LEFT JOIN:连接学生表和成绩表,这里使用左连接,因为不是所有学生都选修了课程。
- ON:指定连接条件,这里是成绩表中的学生编号和学生表中的学生编号相等。
- GROUP BY:将结果按学生编号分组,用于计算每个学生的选修课程数和总成绩。
- COUNT:计算选修课程数。
- SUM:计算总成绩
到了这里,关于①MySQL刷题马拉松:坚持刷题,MySQL技能大提升!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!