文章目录
- 📋前言
- 🎯题目解析
- 1️⃣创建数据库
- 2️⃣创建表
- 📑Student 表
- 📑Course 表
- 📑SC 表
- 🎯完整答案
- 📝最后
📋前言
这篇文章记录一下帮助粉丝朋友一起学习解决的 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
的可视化操作创建 (右键连接 => 新建数据库 =>输入数据库名、字符集、排序规则 => 确定即可)。
CREATE DATABASE `course_select` CHARACTER SET '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 表
CREATE TABLE Student (
Sno CHAR(8) NOT NULL,
Sname VARCHAR(20),
Sage INT,
Ssex CHAR(2),
Sdept VARCHAR(20),
PRIMARY KEY (Sno)
);
-- 插入 student 表数据
INSERT INTO Student (Sno, Sname, Sage, Ssex, Sdept) VALUES
('95001', '张可可', 20, '男', '计算机系'),
('95002', '李晓晓', 21, '男', '数学系'),
('95003', '黄珊', 22, '女', '英语系');
在 Navicat
新建查询,然后运行 SQL
语句创建表(下面两个表也是这样操作,不重复赘述)
📑Course 表
-- 创建 Course 表
CREATE TABLE Course (
Cno CHAR(4) NOT NULL,
Cname VARCHAR(20),
teacher VARCHAR(20),
PRIMARY KEY (Cno)
);
-- 插入 Course 表数据
INSERT INTO Course (Cno, Cname, Teacher) VALUES
('001', '高等数学', '张三'),
('002', '大学英语', '李四'),
('003', '计算机体系结构', '刘军');
📑SC 表
-- 创建 SC 表
CREATE TABLE SC (
Sno CHAR(8) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade FLOAT,
PRIMARY KEY (Sno, Cno),
FOREIGN KEY (Sno) REFERENCES student(Sno),
FOREIGN KEY (Cno) REFERENCES Course(Cno)
);
-- 插入 SC 表数据
INSERT INTO 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 表,注明主码和外码。
这题在上面创建表的时候已经算是完成了,所以就不多赘述了(这里的主码、外码就是指主键和外键,我是这样理解的)。
CREATE TABLE SC (
Sno CHAR(8) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade FLOAT,
PRIMARY KEY (Sno, Cno),
FOREIGN KEY (Sno) REFERENCES student(Sno),
FOREIGN KEY (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
GROUP BY student.Sno, student.Sname
HAVING AVG(SC.Grade) >= 90;
(6)删除学号为 95002 学生的选课记录。
DELETE FROM SC
WHERE Sno = '95002';
(7)将学号为 95003 学生的年龄修改为 19 岁。
UPDATE student
SET Sage = 19
WHERE Sno = '95003';
(8)插入一条学生记录(95004,李玉荷,18,计算机系,女)。
INSERT INTO student(Sno, Sname, Sage,Sdept, Ssex)
VALUES ('95004', '李玉荷', '18','计算机系', '女');
(9)将 SC 表查询的权限授权给所有用户。(参考)
GRANT SELECT ON SC TO PUBLIC;
(10)创建数学系的学生视图。
CREATE VIEW math_students AS
SELECT Sno, Sname, Sage, Ssex
FROM student
WHERE Sdept = '数学系';
📝最后
这就算 MySQL
课后习题——学生选课数据库相关操作的全部内容了,内容很基础,都是基础的数据库语句和操作,通过这个练习,可以熟悉 MySQL
和 Navicat
使用。