MySQL多表关联查询练习题

一、创建表的素材

1.创建student和score表
CREATE TABLE student (
id INT(10) NOT NULL UNIQUE 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) NOT NULL UNIQUE 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( 903,'张三', '女',1990,'中文系', '湖南省永州市');
INSERT INTO student VALUES( 904,'李四', '男',1990,'英语系', '辽宁省阜新市');
INSERT INTO student VALUES( 905,'王五', '女',1991,'英语系', '福建省厦门市');
INSERT INTO student VALUES( 906,'王六', '男',1988,'计算机系', '湖南省衡阳市');
向score表插入记录的INSERT语句如下:
INSERT INTO score VALUES(NULL,901, '计算机',98);
INSERT INTO score VALUES(NULL,901, '英语', 80);
INSERT INTO score VALUES(NULL,902, '计算机',65);
INSERT INTO score VALUES(NULL,902, '中文',88);
INSERT INTO score VALUES(NULL,903, '中文',95);
INSERT INTO score VALUES(NULL,904, '计算机',70);
INSERT INTO score VALUES(NULL,904, '英语',92);
INSERT INTO score VALUES(NULL,905, '英语',94);
INSERT INTO score VALUES(NULL,906, '计算机',90);
INSERT INTO score VALUES(NULL,906, '英语',85);

二、题目要求

1.查询student表的所有记录
2.查询student表的第2条到4条记录
3.从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息
4.从student表中查询计算机系和英语系的学生的信息
5.从student表中查询年龄18~22岁的学生信息
6.从student表中查询每个院系有多少人
7.从score表中查询每个科目的最高分
8.查询李四的考试科目(c_name)和考试成绩(grade)
9.用连接的方式查询所有学生的信息和考试信息
10.计算每个学生的总成绩
11.计算每个考试科目的平均成绩
12.查询计算机成绩低于95的学生信息
13.查询同时参加计算机和英语考试的学生的信息
14.将计算机考试成绩按从高到低进行排序
15.从student表和score表中查询出学生的学号,然后合并查询结果
16.查询姓张或者姓王的同学的姓名、院系和考试科目及成绩
17.查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩

三、完成步骤

3.1 登录MySQL并创建表

①登录MySQL并切换数据库

②创建student和score表

3.2 插入数据

①为student表增加记录

②为score表增加记录

3.3 查询student表的所有记录

①命令

bash 复制代码
mysql> select * from student;

②结果

3.4 查询student表的第2条到4条记录

①命令

bash 复制代码
mysql> select * from student  limit 1,3;

②结果

3.5 从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息

①命令

bash 复制代码
mysql> select id,name,department from student;

②结果

3.6 从student表中查询计算机系和英语系的学生的信息

①命令

bash 复制代码
#方法一
mysql> select * from student where department = "计算机系" or department = "英语系";
#方法二
mysql> select * from student where department regexp '(计算机系|英语系)';

②结果

3.7 从student表中查询年龄18~22岁的学生信息

①命令

bash 复制代码
mysql> select * from student where 2024-birth between 18 and 22;

②结果

3.8 从student表中查询每个院系有多少人

①命令

bash 复制代码
#方法一(不建议使用)
mysql> select count(*) from student where department="计算机系";
mysql> select count(*) from student where department="中文系";
mysql> select count(*) from student where department="英语系";
#方法二
mysql> select department,count(*) as "每个院系总人数" from student group by department;

②结果

3.9 从score表中查询每个科目的最高分

①命令

bash 复制代码
mysql> select c_name,max(grade) from score group by c_name;

②结果

3.10 查询李四的考试科目(c_name)和考试成绩(grade)

①命令

bash 复制代码
mysql> select st.name, sc.c_name, sc.grade
    -> from student st
    -> inner join score sc on st.id = sc.stu_id
    -> where st.name = "李四";

②结果

3.11 用连接的方式查询所有学生的信息和考试信息

①命令

bash 复制代码
mysql> select st.*,sc.* from student st left join score sc on (st.id=sc.stu_id);

②结果

3.12 计算每个学生的总成绩

①命令

bash 复制代码
mysql> select st.name,sum(sc.grade) from student st left join score sc on st.id=sc.stu_id group by st.name;

②结果

3.13 计算每个考试科目的平均成绩

①命令

bash 复制代码
#方法一
mysql> select sc.c_name,avg(sc.grade) from score sc group by sc.c_name;
#方法二
mysql> select c_name,avg(grade) from score group by c_name;

②结果

3.14 查询计算机成绩低于95的学生信息

①命令

bash 复制代码
mysql> select st.name,sc.grade from score sc inner join student st on st.id=sc.stu_id where c_name='计算机' and grade < 95;

②结果

3.15 查询同时参加计算机和英语考试的学生的信息

①命令

bash 复制代码
mysql> select sc.stu_id,group_concat(sc.c_name),st.name,st.sex,st.birth,st.department,st.address from score sc,student st where st.id=sc.stu_id group by sc.s
tu_id having group_concat(sc.c_name)='计算机,英语';

②结果

3.16 将计算机考试成绩按从高到低进行排序

①命令

bash 复制代码
mysql> select * from score where c_name='计算机' order by grade desc;

②结果

3.17 从student表和score表中查询出学生的学号,然后合并查询结果

①命令

bash 复制代码
mysql> select st.id,sc.stu_id from student st left join score sc on st.id=sc.stu_id;

②结果

3.18 查询姓张或者姓王的同学的姓名、院系和考试科目及成绩

①命令

bash 复制代码
mysql> select st.name, st.department, sc.c_name, sc.grade
    -> from student st
    -> inner join score sc on st.id = sc.stu_id
    -> where st.name like '张%' or st.name like '王%';

②结果

3.19 查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩

①命令

bash 复制代码
mysql> select st.name,st.birth,st.department,sc.c_name,sc.grade
    -> from student st
    -> inner join score sc on (st.id = sc.stu_id)
    -> where st.address like '湖南省%';

②结果

相关推荐
JZC_xiaozhong3 小时前
数据不互通、审批慢?企业多系统智能协同与流程自动化解决方案
运维·自动化·流程管理·流程自动化·数据集成与应用集成·流程监控·流程可视化设计
爱学习的小囧3 小时前
ESXi 8.0 原生支持 NVMe 固态硬盘吗?VMD 配置详解教程
linux·运维·服务器·esxi·esxi8.0
NCIN EXPE3 小时前
redis 使用
数据库·redis·缓存
MongoDB 数据平台3 小时前
为编码代理引入 MongoDB 代理技能和插件
数据库·mongodb
极客on之路3 小时前
mysql explain type 各个字段解释
数据库·mysql
代码雕刻家3 小时前
MySQL与SQL Server的基本指令
数据库·mysql·sqlserver
lThE ANDE3 小时前
开启mysql的binlog日志
数据库·mysql
坚持就完事了3 小时前
Linux中的变量
linux·运维·服务器
hERS EOUS4 小时前
nginx 代理 redis
运维·redis·nginx
yejqvow124 小时前
CSS如何控制placeholder文字的颜色_使用--placeholder伪元素
jvm·数据库·python