MySQL数据库的习题:添加习题
在学习和掌握MySQL数据库的过程中,练习题目是巩固知识和提升技能的重要手段,本文将详细列出一些MySQL数据库相关的习题,涵盖从基础到进阶的内容,帮助读者全面提升数据库管理能力,以下是对每个习题的详细介绍和解答思路。
一、基础操作篇
1、创建数据库
创建一个名为school
的数据库。
解答:使用CREATE DATABASE
语句创建数据库。
CREATE DATABASE school;
2、查看数据库
列出当前MySQL服务器上的所有数据库。
解答:使用SHOW DATABASES
语句查看所有数据库。
SHOW DATABASES;
3、选择数据库
切换到刚刚创建的school
数据库。
解答:使用USE
语句选择数据库。
USE school;
4、创建表
在school
数据库中创建一个名为students
的表,包含以下字段:id
(自增主键)、name
(姓名,最长50个字符)、age
(年龄,整数)、grade
(年级,最长10个字符)。
解答:使用CREATE TABLE
语句创建表。
CREATE TABLE students ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), age INT, grade VARCHAR(10) );
5、查看表结构
查看students
表的结构。
解答:使用DESCRIBE
语句查看表结构。
DESCRIBE students;
6、插入数据
向students
表中插入三条记录:('Alice', 20, 'A'), ('Bob', 22, 'B'), ('Charlie', 21, 'A')。
解答:使用INSERT INTO
语句插入数据。
INSERT INTO students (name, age, grade) VALUES ('Alice', 20, 'A'), ('Bob', 22, 'B'), ('Charlie', 21, 'A');
二、进阶查询篇
7、查询所有课程的名称以及对应的任课老师姓名
假设有三个表:course
(课程表,包含课程ID和课程名称)、teacher
(教师表,包含教师ID和教师姓名)、course_teacher
(中间表,包含课程ID和教师ID),查询所有课程的名称以及对应的任课老师姓名。
解答:使用JOIN
语句进行多表连接查询。
SELECT course.name AS course_name, teacher.name AS teacher_name FROM course JOIN course_teacher ON course.id = course_teacher.course_id JOIN teacher ON course_teacher.teacher_id = teacher.id;
8、查询学习"数据结构"比"Java语言"成绩低的学生学号
假设有一个score
表(包含学生ID、课程ID和分数)和一个course
表(包含课程ID和课程名称),查询学习"数据结构"比"Java语言"成绩低的学生学号。
解答:先通过子查询找到两门课程的成绩,再进行比较。
SELECT shuju.student_id FROM (SELECT score.student_id, score.mark AS shuju_mark FROM score JOIN course ON score.course_id = course.id WHERE course.name = '数据结构') AS shuju JOIN (SELECT score.student_id, score.mark AS java_mark FROM score JOIN course ON score.course_id = course.id WHERE course.name = 'Java语言') AS java ON shuju.student_id = java.student_id WHERE shuju.shuju_mark < java.java_mark;
9、查询平均成绩大于65分的同学的ID和平均成绩
假设有一个score
表(包含学生ID和分数),查询平均成绩大于65分的同学的ID和平均成绩。
解答:使用GROUP BY
和HAVING
子句进行分组和筛选。
SELECT student_id, ROUND(AVG(mark), 2) AS average_grade FROM score GROUP BY student_id HAVING average_grade > 65;
三、综合应用篇
10、查询没学过“大牛”老师课的同学的姓名
假设有三个表:student
(学生表,包含学生ID和姓名)、score
(成绩表,包含学生ID和课程ID)、course
(课程表,包含课程ID和教师ID)、teacher
(教师表,包含教师ID和教师姓名),查询没学过“大牛”老师课的同学的姓名。
解答:使用子查询和NOT IN
进行筛选。
SELECT name FROM student WHERE id NOT IN (SELECT DISTINCT student_id FROM score JOIN course ON score.course_id = course.id JOIN teacher ON course.teacher_id = teacher.id WHERE teacher.name = '大牛');
11、查询学过“大牛”老师所教的所有课程的同学的姓名
解答:使用子查询和IN
进行筛选。
SELECT DISTINCT student.name FROM student WHERE id IN (SELECT DISTINCT score.student_id FROM score JOIN course ON score.course_id = course.id WHERE course.teacher_id = (SELECT id FROM teacher WHERE name = '大牛'));
四、相关问答FAQs
1、云数据库与自建数据库有什么不同?
解答:云数据库是由云服务提供商托管和管理的数据库服务,用户无需关心硬件维护、备份恢复等繁琐事务;自建数据库则需要用户自行管理服务器、安装配置数据库软件、负责日常维护和安全等工作,云数据库具有弹性伸缩、高可用性、安全性强等优点,但成本相对较高;自建数据库则更加灵活可控,但需要投入更多的管理精力。
2、什么是主键冲突替换?
解答:主键冲突替换是指在向数据库表中插入数据时,如果插入的数据的主键值已经存在,那么新的数据将替换旧的数据,这通常用于需要更新现有记录的场景,在MySQL中,可以通过设置插入语句的选项来实现主键冲突替换,如使用ON DUPLICATE KEY UPDATE
语句,当发生主键冲突时,根据指定的更新规则更新现有记录。
五、小编有话说
通过以上习题的练习,相信读者对MySQL数据库的基础操作、进阶查询以及综合应用有了更深入的了解,在实际工作中,我们还需要不断学习和实践来提升自己的数据库管理能力,也要注意数据库的安全性和性能优化问题,确保数据的完整性和系统的稳定运行,希望本文能为大家的学习提供有益的帮助!