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 '湖南省%';

②结果

相关推荐
努力成为包租婆34 分钟前
uniapp--原生插件开发
java·数据库·uni-app
羑悻的小杀马特2 小时前
PostgreSQL + Cpolar 组合拳,彻底打破局域网限制,远程访问数据库像本地一样简单
数据库·postgresql
杜子不疼.2 小时前
【Linux】基础IO(二):系统文件IO
linux·运维·服务器
郝学胜-神的一滴2 小时前
深入理解网络IP协议与TTL机制:从原理到实践
linux·服务器·开发语言·网络·网络协议·tcp/ip·程序人生
松涛和鸣2 小时前
DAY61 IMX6ULL UART Serial Communication Practice
linux·服务器·网络·arm开发·数据库·驱动开发
二哈喇子!4 小时前
MySQL数据库概述
mysql
二哈喇子!8 小时前
MySQL数据更新操作
数据库·sql
二哈喇子!8 小时前
MySQL命令行导入数据库
数据库·sql·mysql·vs code
心动啊1218 小时前
SQLAlchemy 的使用
数据库
Justice link9 小时前
K8S基本配置
运维·docker·容器