MySql多表查询练习题

这篇博客展示了多个MySql查询操作,包括查询特定表的所有记录、指定范围的记录、特定字段信息,以及涉及多条件筛选、聚合函数、连接查询等复杂查询,覆盖了学生信息、年龄、院系分布、考试成绩等数据。
MySQL查询语句练习题
Sutdent表的定义
字段名	字段描述	数据类型	主键	外键	非空	唯一	自增
Id	学号	INT(10)	是	否	是	是	是
Name	姓名	VARCHAR(20)	否	否	是	否	否
Sex	性别	VARCHAR(4)	否	否	否	否	否
Birth	出生年份	YEAR	否	否	否	否	否
Department	院系	VARCHAR(20)	否	否	是	否	否
Address	家庭住址	VARCHAR(50)	否	否	否	否	否
 
Score表的定义
字段名	字段描述	数据类型	主键	外键	非空	唯一	自增
Id	编号	INT(10)	是	否	是	是	是
Stu_id	学号	INT(10)	否	否	是	否	否
C_name	课程名	VARCHAR(20)	否	否	否	否	否
Grade	分数	INT(10)	否	否	否	否	否
 
CREATE TABLE student(
id INT(10) PRIMARY key,
name VARCHAR(20) not NULL,
sex VARCHAR(4),
birth YEAR,
department VARCHAR(20),
address VARCHAR(50)
);
创建score表。SQL代码如下:
CREATE TABLE score(
id INT(10) PRIMARY KEY AUTO_INCREMENT,
stu_id INT(10) NOT NULL,
c_name VARCHAR(20),
grade INT(10)
);
2.为student表和score表增加记录
向student表插入记录的INSERT语句如下:
INSERT INTO student VALUES(901,'张老大','男',1985,'计算机系','北京市海淀区');
INSERT INTO student VALUES(902,'张老二','男',1986,'中文系','北京市昌平区');
INSERT INTO student VALUES(
### 带有中文注释的 MySQL 查询练习题 #### 查询题目一:教师与课程关联查询 ```sql -- 查找教授特定课程的所有教师姓名及其对应的课程名称 SELECT t.t_name AS 教师姓名, c.c_name AS 课程名称 FROM teacher t JOIN course c ON t.t_id = c.teacher_id -- 连接条件为教师编号相等 WHERE c.c_name = '计算机网络' -- 条件筛选指定课程名为“计算机网络” ``` #### 查询题目二:学生选课情况统计 ```sql -- 统计每门课程被少名不同学号的学生所选修,并显示这些学生的平均成绩 SELECT c.c_name AS 课程名称, COUNT(DISTINCT s.student_no) AS 选修人数, AVG(sc.score) AS 平均分 FROM student_course sc JOIN course c ON sc.course_id = c.c_id -- 关联课程获取课程详情 LEFT JOIN student s ON sc.student_no = s.student_no -- 左连接到学生以获得学生信息 GROUP BY c.c_name -- 按照课程名称分组计算统计数据 HAVING COUNT(DISTINCT s.student_no) > 0 -- 筛选出至少有一人选修该课程的结果集 ``` #### 查询题目三:班级内优秀毕业生名单 ```sql -- 获取各班毕业设计成绩最高的前五位同学的信息(假设存在graduation_design) WITH RankedStudents AS ( SELECT g.gradeId AS 班级编号, s.name AS 学生姓名, gd.design_score AS 成绩, ROW_NUMBER() OVER(PARTITION BY g.gradeId ORDER BY gd.design_score DESC) as 排名 FROM graduation_design gd JOIN student s ON gd.studentNo = s.studentNo -- 联合学生基本信息 JOIN grade g ON s.gradeId = g.id -- 加入年级信息以便按班级划分 ) SELECT rs.班级编号, rs.学生姓名, rs.成绩 FROM RankedStudents rs WHERE rs.排名 <= 5 -- 只取每个班级内的前五名 ORDER BY rs.班级编号 ASC, rs.成绩 DESC; ``` 以上SQL语句不仅实现了之间的联合操作,还通过适当的选择、过滤以及聚合函数完成了较为复杂的业务逻辑处理。为了便于理解,在每一行代码后面都附上了相应的解释说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值