②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 = '张三');
  1. 使用JOIN语句连接Student、Score、Course和Teacher表,查询选过张三老师所授课程的学生学号。
  2. 使用NOT IN语句查询学号不在上面子查询中的学生信息。
  3. 使用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语句查询所有符合条件的学生信息。

在这里插入图片描述

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

以山河作礼。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值