②MySQL刷题马拉松:坚持刷题,MySQL技能大提升!
🏘️🏘️个人简介:以山河作礼。
🎖️🎖️: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);
6、查询"李"姓老师的数量
select count(Tname) from Teacher where Tname like '李%';
select:表示要查询数据。
count(Tname):表示统计结果集中Tname列的数量。
from Teacher:表示从Teacher表中查询数据。
where Tname like ‘李%’:表示查询Tname列以“李”开头的数据。
7、查询学过"张三"老师授课的同学的信息
查询张三老师的教师编号:
select Tid from Teacher where Tname = '张三';
通过教师编号查出课程号:
select Cid from Course where Course.Tid = (select Tid from Teacher where Tname = '张三');
根据课程号查出学习该课程的学生号,然后得出学号:
select Sid from Score where Score.Cid = (select Cid from Course where Course.Tid = (select Tid from Teacher where Tname = '张三'));
根据学号查出信息:
select * from Student where Student.Sid in (select Sid from Score where Score.Cid = (select Cid from Course where Course.Tid = (select Tid from Teacher where Tname = '张三')));
这段查询语句的作用是查出张三老师所授课程的所有学生的信息。其中,第一条语句查询张三老师的教师编号,第二条语句通过教师编号查询出所有课程的编号,第三条语句通过课程编号查询出所有学生的学号,最后一条语句根据学号查询出学生的详细信息。
8、查询没学过"张三"老师授课的同学
select s.* from Student s where s.Sid not in (select s.Sid from Student s join Score sc on s.Sid = sc.Sid join Course c on sc.Cid = c.Cid join Teacher t on t.Tid = c.Tid
where t.Tname = '张三');
- 使用JOIN语句连接Student、Score、Course和Teacher表,查询选过张三老师所授课程的学生学号。
- 使用NOT IN语句查询学号不在上面子查询中的学生信息。
- 使用SELECT语句查询所有符合条件的学生信息。
9、查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息
select * from Student where Sid in (select distinct(Sid) from (select Sid from Score where Sid in (select Sid from Score where Cid = 1 ) and
Sid in (select Sid from Score where Cid = 2 )) as a);
使用子查询查询选修了课程1的学生学号。
使用子查询查询选修了课程2的学生学号。
将上述两个子查询结果取交集,得到同时选修了课程1和课程2的学生学号。
使用IN语句查询学生学号在上述子查询结果中的学生信息。
使用SELECT语句查询所有符合条件的学生信息。
10、查询学过编号为"01"但是没有学过编号为"02"的课程的同学的信息
select * from Student where Sid in (select distinct(Sid) from (select Sid from Score where Sid in (select Sid from Score where Cid = 1 ) and
Sid not in (select Sid from Score where Cid = 2 )) as a);
使用子查询查询选修了课程1的学生学号。
使用子查询查询未选修课程2的学生学号。
将上述两个子查询结果取交集,得到只选修了课程1而未选修课程2的学生学号。
使用IN语句查询学生学号在上述子查询结果中的学生信息。
使用SELECT语句查询所有符合条件的学生信息。