MySQL常用练手题目

数据库表名和字段设计

1.学生表

Student(s_id,s_name,s_birth,s_sex)

学生编号,学生姓名, 出生年月,学生性别

2.课程表

Course(c_id,c_name,t_id)

课程编号, 课程名称, 教师编号

3.教师表

Teacher(t_id,t_name)

教师编号,教师姓名

4.成绩表

Score (s_id,c_id,s_score)

学生编号,课程编号,分数

建表语句

学生表

sql 复制代码
CREATE TABLE `Student`( `s_id` VARCHAR(20), `s_name` VARCHAR(20) NOT NULL DEFAULT '', `s_birth` VARCHAR(20) NOT NULL DEFAULT '', `s_sex` VARCHAR(10) NOT NULL DEFAULT '', PRIMARY KEY(`s_id`) );

课程表

sql 复制代码
CREATE TABLE `Course`( `c_id` VARCHAR(20), `c_name` VARCHAR(20) NOT NULL DEFAULT '', `t_id` VARCHAR(20) NOT NULL, PRIMARY KEY(`c_id`) ); 

教师表

sql 复制代码
CREATE TABLE `Teacher`( `t_id` VARCHAR(20), `t_name` VARCHAR(20) NOT NULL DEFAULT '', PRIMARY KEY(`t_id`) );

成绩表

sql 复制代码
CREATE TABLE `Score`( `s_id` VARCHAR(20), `c_id` VARCHAR(20), `s_score` INT(3), PRIMARY KEY(`s_id`,`c_id`) ); 

插入测试数据

学生表

sql 复制代码
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' , '女'); 

教师表

sql 复制代码
insert into Course values('01' , '语文' , '02'); 
insert into Course values('02' , '数学' , '01'); 
insert into Course values('03' , '英语' , '03'); 

课程表

sql 复制代码
insert into Teacher values('01' , '张三');
insert into Teacher values('02' , '李四'); 
insert into Teacher values('03' , '王五'); 

成绩表

sql 复制代码
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"课程成绩高的学生的信息及课程分数

sql 复制代码
select a.*,b.s_score as 01_score,c.s_score as 02_score from 
student a
	join score b on a.s_id=b.s_id and b.c_id='01'
	left join score c on a.s_id=c.s_id and c.c_id='02' or c.c_id = null where
	b.s_score>c.s_score;

2、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩

sql 复制代码
select b.s_id,b.s_name,ROUND(AVG(a.s_score),2) as avg_score from
	student b
	join score a on b.s_id = a.s_id
	GROUP BY b.s_id,b.s_name HAVING avg_score >= 60;

3、查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩-- (包括有成绩的和无成绩的)

sql 复制代码
select b.s_id,b.s_name,ROUND(AVG(a.s_score),2) as avg_score from
	student b
	left join score a on b.s_id = a.s_id
	GROUP BY b.s_id,b.s_name HAVING avg_score < 60
	union
select a.s_id,a.s_name,0 as avg_score from 
	student a
	where a.s_id not in (select distinct s_id from score);

4、查询学过"张三"老师授课的同学的信息

sql 复制代码
select a.* from
	student a
	join score b on a.s_id=b.s_id where b.c_id in(
					select c_id from course where t_id = (
								select t_id from teacher where t_name = '张三'));

5、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩

sql 复制代码
select a.s_id,a.s_name,count(b.c_id) as sum_course,sum(b.s_score) as sum_score from 
	student a
	left join score b on a.s_id = b.s_id
	GROUP BY a.s_id,a.s_name;

6、查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息

sql 复制代码
select a.* from
	student a,score b,score c
	where a.s_id = b.s_id and a.s_id = c.s_id and b.c_id ='01' and c.c_id='02';

7、查询学过编号为"01"但是没有学过编号为"02"的课程的同学的信息

sql 复制代码
select a.* from
	student a
	where a.s_id in (select s_id from score where c_id='01') 
		and a.s_id not in (select s_id from score where c_id='02');
相关推荐
Karoku06612 分钟前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch
小技与小术1 小时前
数据库表设计范式
数据库·mysql
安迁岚1 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
运维·服务器·数据库·sql·mysql
安迁岚1 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验九 触发器
数据库·sql·mysql·oracle·实验报告
Loganer1 小时前
MongoDB分片集群搭建
数据库·mongodb
LKID体2 小时前
Python操作neo4j库py2neo使用之创建和查询(二)
数据库·python·neo4j
刘大浪2 小时前
后端数据增删改查基于Springboot+mybatis mysql 时间根据当时时间自动填充,数据库连接查询不一致,mysql数据库连接不好用
数据库·spring boot·mybatis
一只爱撸猫的程序猿2 小时前
简单实现一个系统升级过程中的数据平滑迁移的场景实例
数据库·spring boot·程序员
无敌岩雀2 小时前
MySQL中的索引
数据库·mysql
a_安徒生2 小时前
linux安装TDengine
linux·数据库·tdengine