首页 / 大硬盘VPS推荐 / 正文
MySQL语句练习,mysql语句大全实例教程

Time:2025年01月06日 Read:6 评论:42 作者:y21dr45

一、背景介绍

在信息技术和数据管理领域,数据库扮演着至关重要的角色,对于数据库的管理和操作,SQL(结构化查询语言)是必不可少的工具,MySQL作为当前最流行的开源关系型数据库管理系统之一,广泛应用于各种类型的项目和应用场景中,掌握MySQL语句,不仅能提高数据查询和操作效率,还能为数据处理和分析提供强有力的支持,本文将通过一系列实例和练习,帮助读者熟悉并掌握MySQL的基本用法及常见操作。

MySQL语句练习,mysql语句大全实例教程

二、实验环境

1、操作系统:Windows、macOS、Linux等均可。

2、数据库系统:MySQL 8.0

3、IDE工具:MySQL Workbench、phpMyAdmin、DBeaver,或者任何支持MySQL的数据库管理工具。

4、编程语言:SQL

5、数据表:学生信息表(Student)、课程信息表(Course)、成绩表(Score)

三、数据表结构

创建以下三个数据表,并插入示例数据:

-- 学生表
CREATE TABLEStudent (s_id VARCHAR(20) PRIMARY KEY,s_name VARCHAR(20) NOT NULL DEFAULT '',s_birth VARCHAR(20) NOT NULL DEFAULT '',s_sex VARCHAR(10) NOT NULL DEFAULT ''
);
-- 课程表
CREATE TABLECourse (c_id VARCHAR(20) PRIMARY KEY,c_name VARCHAR(20) NOT NULL DEFAULT '',t_id VARCHAR(20) NOT NULL
);
-- 成绩表
CREATE TABLEScore (s_id VARCHAR(20),c_id VARCHAR(20),s_score INT(3),
    PRIMARY KEY (s_id,c_id)
);
-- 插入学生表测试数据
INSERT INTOStudent VALUES ('01', '赵雷', '1990-01-01', '男');
INSERT INTOStudent VALUES ('02', '钱电', '1990-12-21', '男');
INSERT INTOStudent VALUES ('03', '孙风', '1990-05-20', '男');
INSERT INTOStudent VALUES ('04', '李云', '1990-08-06', '男');
INSERT INTOStudent VALUES ('05', '周梅', '1991-12-01', '女');
INSERT INTOStudent VALUES ('06', '吴兰', '1992-03-01', '女');
INSERT INTOStudent VALUES ('07', '郑竹', '1989-07-01', '女');
INSERT INTOStudent VALUES ('08', '王菊', '1990-01-20', '女');
-- 插入课程表测试数据
INSERT INTOCourse VALUES ('01', '语文', '02');
INSERT INTOCourse VALUES ('02', '数学', '01');
INSERT INTOCourse VALUES ('03', '英语', '03');
-- 插入成绩表测试数据
INSERT INTOScore VALUES ('01', '01', 80);
INSERT INTOScore VALUES ('01', '02', 90);
INSERT INTOScore VALUES ('01', '03', 99);
INSERT INTOScore VALUES ('02', '01', 70);
INSERT INTOScore VALUES ('02', '02', 60);
INSERT INTOScore VALUES ('02', '03', 80);
INSERT INTOScore VALUES ('03', '01', 80);
INSERT INTOScore VALUES ('03', '02', 80);
INSERT INTOScore VALUES ('03', '03', 80);
INSERT INTOScore VALUES ('04', '01', 50);
INSERT INTOScore VALUES ('04', '02', 30);
INSERT INTOScore VALUES ('04', '03', 20);
INSERT INTOScore VALUES ('05', '01', 76);
INSERT INTOScore VALUES ('05', '02', 87);
INSERT INTOScore VALUES ('06', '01', 31);
INSERT INTOScore VALUES ('06', '03', 34);
INSERT INTOScore VALUES ('07', '02', 89);
INSERT INTOScore VALUES ('07', '03', 98);

四、练习题目

题目1:查询”01”课程比”02”课程成绩高的学生的信息及课程分数

思路:首先找到课程编号为“01”和“02”的成绩,然后比较两者的成绩,筛选出课程“01”的成绩高于课程“02”的记录,最后连接学生表获取详细信息。

SELECT a.*, b.s_score AS score01, c.s_score AS score02
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' AND c.s_score IS NOT NULL
WHERE b.s_score > c.s_score;

题目2:查询平均成绩大于60分的学生的学号和平均成绩

思路:在成绩表中按学生ID分组,计算每个学生的平均成绩,然后筛选出平均成绩大于60分的学生。

SELECT s_id, avg_score
FROM (
    SELECT s_id, (s_score + IFNULL(AVG(s_score), 0)) / COUNT(*) AS avg_score
    FROM Score
    GROUP BY s_id
) AS temp
WHERE avg_score > 60;

题目3:查询所有同学的‘语文’课程的成绩

思路:连接课程表和成绩表,筛选出课程名为“语文”的记录。

SELECT a.s_id, s_name, c_name, b.s_score
FROM Student a
JOIN Score b ON a.s_id = b.s_id
JOIN Course c ON b.c_id = c.c_id
WHERE c.c_name = '语文';

题目4:查询没有任何一门课程成绩小于60分的所有学生的信息

思路:找出所有成绩小于60分的学生,取反集即为没有不及格课程的学生。

SELECT *
FROM Student
WHERE s_id NOT IN (
    SELECT DISTINCT s_id
    FROM Score
    WHERE s_score < 60
);

题目5:查询“李云”的个人信息

思路:直接根据姓名查询学生表。

SELECT *
FROM Student
WHERE s_name = '李云';

题目6:求每门课程的平均成绩,结果按平均成绩升序排列

思路:按课程ID分组计算平均成绩,并按平均成绩排序。

SELECT c_id, c_name, avg(s_score) AS avg_score
FROM Score
RIGHT JOIN Course ON Score.c_id = Course.c_id
GROUP BY c_id, avg(s_score)
ORDER BY avg(s_score) ASC;

题目7:统计每门课程的学生人数,课程人数未超过2人的课程信息

思路:按课程ID分组统计人数,筛选出人数小于等于2的课程。

SELECT c_id, c_name, student_count
FROM Course
LEFT JOIN Score ON Course.c_id = Score.c_id
GROUP BY c_id, c_name;
HAVING student_count <= 2;

标签: mysql语句练习 
排行榜
关于我们
「好主机」服务器测评网专注于为用户提供专业、真实的服务器评测与高性价比推荐。我们通过硬核性能测试、稳定性追踪及用户真实评价,帮助企业和个人用户快速找到最适合的服务器解决方案。无论是云服务器、物理服务器还是企业级服务器,好主机都是您值得信赖的选购指南!
快捷菜单1
服务器测评
VPS测评
VPS测评
服务器资讯
服务器资讯
扫码关注
鲁ICP备2022041413号-1