文章目录
📋前言
这篇文章记录一下帮助粉丝朋友一起学习解决的
MySQL
课后习题,内容很基础,都是基础的数据库语句和操作,内容是关于学生选课数据库的一些操作。这里我用
MySQL
和
Navicat
完成这些题目。
🎯题目解析
题目如下:
现有学生选课数据库:Student(Sno,Sname,Sage,Ssex,Sdept)、 Course(Cno,Cname, Teacher)、SC(Sno,Cno,Grade),试用SQL完成下列操作。
(1)创建 SC 表,注明主码和外码。
(2)检索刘军老师所授课程的课程号和课程名。
(3)检素年龄大于 23 的男学生的学号和姓名。
(4)检索学号为 95001 学生所学课程的课程名与任课教师名。
(5)检索课程平均成绩 90 分(含 90 分)以上的学生姓名和学号。
(6)删除学号为 95002 学生的选课记录。
(7)将学号为 95003 学生的年龄修改为 19 岁
(8)插入一条学生记录(95004,李玉荷,18,计算机系,女)。
(9)将 SC 表查询的权限授权给所有用户。
(10)创建数学系的学生视图。
因为是教材的课后习题,所以我们没有开箱即用的数据库和表,因此我们要先创建数据库,并且建相对应的三个表,分别是Student(Sno,Sname,Sage,Ssex,Sdept)、 Course(Cno,Cname, Teacher)、SC(Sno,Cno,Grade)。
1️⃣创建数据库
首先创建数据库 course_select ,可以通过
SQL
语句创建,也可以通过
Navicat
的可视化操作创建 (右键连接 => 新建数据库 =>输入数据库名、字符集、排序规则 => 确定即可)。
CREATEDATABASE`course_select`CHARACTERSET'utf8'COLLATE'utf8_general_ci';
2️⃣创建表
创建好数据库以后,我们根据题目的描述,创建对应的表以及表所需要的字段。同时插入一些默认数据,以及题目中所需要的数据,比如说年龄大于 23 、学号的命名规则(95001)、老师名字(如刘军老师)。
然后是关于表的创建 ,可以通过
SQL
语句创建,也可以通过
Navicat
的可视化操作创建 (下图是创建数据库的方法,右击表 => 新建表 =>在窗口输入内容,如字段名、类型、长度 => 保存 =>给表命名),但这里建议用
SQL
语句创建(巩固基础)。
创建的表和字段名为 Student(Sno,Sname,Sage,Ssex,Sdept)、 Course(Cno,Cname, Teacher)、SC(Sno,Cno,Grade) 。参考的 SQL 语句和插入的默认数据如下。
📑Student 表
-- 创建 Student 表CREATETABLE Student (
Sno CHAR(8)NOTNULL,
Sname VARCHAR(20),
Sage INT,
Ssex CHAR(2),
Sdept VARCHAR(20),PRIMARYKEY(Sno));-- 插入 student 表数据INSERTINTO Student (Sno, Sname, Sage, Ssex, Sdept)VALUES('95001','张可可',20,'男','计算机系'),('95002','李晓晓',21,'男','数学系'),('95003','黄珊',22,'女','英语系');
在
Navicat
新建查询,然后运行
SQL
语句创建表(下面两个表也是这样操作,不重复赘述)
📑Course 表
-- 创建 Course 表CREATETABLE Course (
Cno CHAR(4)NOTNULL,
Cname VARCHAR(20),
teacher VARCHAR(20),PRIMARYKEY(Cno));-- 插入 Course 表数据INSERTINTO Course (Cno, Cname, Teacher)VALUES('001','高等数学','张三'),('002','大学英语','李四'),('003','计算机体系结构','刘军');
📑SC 表
-- 创建 SC 表CREATETABLE SC (
Sno CHAR(8)NOTNULL,
Cno CHAR(4)NOTNULL,
Grade FLOAT,PRIMARYKEY(Sno, Cno),FOREIGNKEY(Sno)REFERENCES student(Sno),FOREIGNKEY(Cno)REFERENCES Course(Cno));-- 插入 SC 表数据INSERTINTO SC (Sno, Cno, Grade)VALUES('95001','001',90),('95001','002',85),('95002','001',70),('95002','003',80),('95003','002',95),('95003','003',90);
创建完这三个表以及插入数据以后,先熟悉每个表的结构以及各个表之间的联系,然后再审题,具体看题目需要完成哪些操作。
🎯完整答案
在完成上面的步骤以后,我们可以开始做题。接下来我们来看看这十道题目的答案。
(1)创建 SC 表,注明主码和外码。
这题在上面创建表的时候已经算是完成了,所以就不多赘述了(这里的主码、外码就是指主键和外键,我是这样理解的)。
CREATETABLE SC (
Sno CHAR(8)NOTNULL,
Cno CHAR(4)NOTNULL,
Grade FLOAT,PRIMARYKEY(Sno, Cno),FOREIGNKEY(Sno)REFERENCES student(Sno),FOREIGNKEY(Cno)REFERENCES Course(Cno));
(2)检索刘军老师所授课程的课程号和课程名。
SELECT Cno, Cname
FROM Course
WHERE teacher ='刘军';
(3)检素年龄大于 23 的男学生的学号和姓名。
这里没有查询到年龄大于 23 岁的男学生,是因为插入数据的时候忘记插入大于 23 岁的默认数据了,因此插入一条大于 23 岁的学生数据再做测试 。
插入数据后,测试成功。
(4)检索学号为 95001 学生所学课程的课程名与任课教师名。
SELECT Course.Cname, Course.teacher
FROM Course, SC
WHERE SC.Sno ='95001'AND SC.Cno = Course.Cno;
(5)检索课程平均成绩 90 分(含 90 分)以上的学生姓名和学号。
SELECT student.Sno, student.Sname
FROM student, SC
WHERE student.Sno = SC.Sno
GROUPBY student.Sno, student.Sname
HAVINGAVG(SC.Grade)>=90;
(6)删除学号为 95002 学生的选课记录。
DELETEFROM SC
WHERE Sno ='95002';
(7)将学号为 95003 学生的年龄修改为 19 岁。
UPDATE student
SET Sage =19WHERE Sno ='95003';
(8)插入一条学生记录(95004,李玉荷,18,计算机系,女)。
INSERTINTO student(Sno, Sname, Sage,Sdept, Ssex)VALUES('95004','李玉荷','18','计算机系','女');
(9)将 SC 表查询的权限授权给所有用户。(参考)
GRANTSELECTON SC TOPUBLIC;
(10)创建数学系的学生视图。
CREATEVIEW math_students ASSELECT Sno, Sname, Sage, Ssex
FROM student
WHERE Sdept ='数学系';
📝最后
这就算
MySQL
课后习题——学生选课数据库相关操作的全部内容了,内容很基础,都是基础的数据库语句和操作,通过这个练习,可以熟悉
MySQL
和
Navicat
使用。
版权归原作者 黛琳ghz 所有, 如有侵权,请联系我们删除。