背景

帮学妹写个数据库实验,环境Navicat + MySql。
实验准备
- 创建 Student 数据库,包括 Students,Courses,SC 表,表结构如下:
-
Students(SNO,SNAME,SEX,BDATE,HEIGHT,DEPARTMENT)
-
Courses(CNO,CNAME,LHOUR,CREDIT,SEMESTER)
-
SC(SNO,CNO,GRADE)
-- ******** 创建表格 ********** DROP TABLE IF EXISTS `Students`; CREATE TABLE `Students` ( `SNO` varchar(10) NOT NULL, `SNAME` varchar(100) NOT NULL, `SEX` varchar(10) DEFAULT NULL, `BDATE` date DEFAULT NULL, `HEIGHT` double DEFAULT NULL, `DEPARTMENT` varchar(100) DEFAULT NULL, PRIMARY KEY (`SNO`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; DROP TABLE IF EXISTS `Courses`; CREATE TABLE `Courses` ( `CNO` varchar(10) NOT NULL, `CNAME` varchar(100) NOT NULL, `LHOUR` double DEFAULT NULL, `CREDIT` double DEFAULT NULL, `SEMESTER` varchar(20) DEFAULT NULL, PRIMARY KEY (`CNO`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; DROP TABLE IF EXISTS `SC`; CREATE TABLE `SC` ( `SNO` varchar(10) NOT NULL, `CNO` varchar(10) NOT NULL, `GRADE` double DEFAULT NULL, PRIMARY KEY (`SNO`,`CNO`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
-
插入测试数据
-- *********** 插入测试数据 *********** INSERT INTO `Students` (`SNO`, `SNAME`, `SEX`, `BDATE`, `HEIGHT`, `DEPARTMENT`) VALUES ('0000001', '张三', '男', '1983-03-18', 1.78, '软件'); INSERT INTO `Students` (`SNO`, `SNAME`, `SEX`, `BDATE`, `HEIGHT`, `DEPARTMENT`) VALUES ('0000002', '李四', '男', '1984-01-01', 1.83, '新传'); INSERT INTO `Students` (`SNO`, `SNAME`, `SEX`, `BDATE`, `HEIGHT`, `DEPARTMENT`) VALUES ('0000003', '王五', '女', '1986-01-23', 1.65, '新传'); INSERT INTO `Students` (`SNO`, `SNAME`, `SEX`, `BDATE`, `HEIGHT`, `DEPARTMENT`) VALUES ('0000004', '刘六', '男', '1987-10-19', 1.89, '数学'); INSERT INTO `Students` (`SNO`, `SNAME`, `SEX`, `BDATE`, `HEIGHT`, `DEPARTMENT`) VALUES ('0000005', '文七', '女', '1988-02-18', 1.76, '艺术'); INSERT INTO `Students` (`SNO`, `SNAME`, `SEX`, `BDATE`, `HEIGHT`, `DEPARTMENT`) VALUES ('0100001', '丐八', '男', '1986-10-01', 1.66, '计算机'); INSERT INTO `Students` (`SNO`, `SNAME`, `SEX`, `BDATE`, `HEIGHT`, `DEPARTMENT`) VALUES ('0100002', '何杨', '男', '1988-04-05', 1.76, '环境'); INSERT INTO `Students` (`SNO`, `SNAME`, `SEX`, `BDATE`, `HEIGHT`, `DEPARTMENT`) VALUES ('0100003', '丛平', '女', '1990-10-10', 1.55, '生物'); INSERT INTO `Students` (`SNO`, `SNAME`, `SEX`, `BDATE`, `HEIGHT`, `DEPARTMENT`) VALUES ('0100004', '徐洁', '女', '1986-04-20', 1.83, '化学'); INSERT INTO `Students` (`SNO`, `SNAME`, `SEX`, `BDATE`, `HEIGHT`, `DEPARTMENT`) VALUES ('0100005', '志培', '男', '1989-04-10', 1.87, '物理'); INSERT INTO `Courses` (`CNO`, `CNAME`, `LHOUR`, `CREDIT`, `SEMESTER`) VALUES ('CS-001', '计算机概论', 30, 2, '春季'); INSERT INTO `Courses` (`CNO`, `CNAME`, `LHOUR`, `CREDIT`, `SEMESTER`) VALUES ('CS-002', '体系结构', 60, 4, '春季'); INSERT INTO `Courses` (`CNO`, `CNAME`, `LHOUR`, `CREDIT`, `SEMESTER`) VALUES ('CS-003', '数据库', 40, 3, '秋季'); INSERT INTO `Courses` (`CNO`, `CNAME`, `LHOUR`, `CREDIT`, `SEMESTER`) VALUES ('CS-004', '编译原理', 50, 3, '秋季'); INSERT INTO `Courses` (`CNO`, `CNAME`, `LHOUR`, `CREDIT`, `SEMESTER`) VALUES ('CS-221', 'Java', 30, 2, '秋季'); INSERT INTO `Courses` (`CNO`, `CNAME`, `LHOUR`, `CREDIT`, `SEMESTER`) VALUES ('EE-001', '电子技术', 20, 2, '春季'); INSERT INTO `Courses` (`CNO`, `CNAME`, `LHOUR`, `CREDIT`, `SEMESTER`) VALUES ('EE-002', '数字电路', 40, 3, '秋季'); INSERT INTO `Courses` (`CNO`, `CNAME`, `LHOUR`, `CREDIT`, `SEMESTER`) VALUES ('EE-003', '数字逻辑', 70, 6, '春季'); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000001', 'CS-001', 89); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000001', 'CS-002', 34); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000001', 'CS-003', 90); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000001', 'CS-004', 67); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000001', 'CS-221', 100); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000001', 'EE-001', 78); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000002', 'CS-001', 90); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000002', 'CS-002', 36); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000002', 'CS-003', 67); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000002', 'CS-004', 65); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000002', 'CS-221', 80); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000002', 'EE-001', 74); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000002', 'EE-002', 90); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000002', 'EE-003', 80); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000003', 'CS-001', 82); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000003', 'CS-002', 85); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000003', 'CS-003', 95); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000003', 'CS-004', 94); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000003', 'CS-221', 86); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000003', 'EE-001', 89); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000003', 'EE-002', 88); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000003', 'EE-003', 96); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000004', 'CS-001', 90); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000004', 'CS-002', 59); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000004', 'CS-003', 79); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000004', 'CS-004', 81); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000004', 'CS-221', 62); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000004', 'EE-001', 93); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000004', 'EE-002', 67); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000004', 'EE-003', 65); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000005', 'CS-001', 96); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000005', 'CS-002', 53); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000005', 'CS-003', 56); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000005', 'CS-004', 98); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000005', 'CS-221', 67); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000005', 'EE-001', 59); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000005', 'EE-002', 65); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0000005', 'EE-003', 78); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100001', 'CS-001', 87); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100001', 'CS-002', 62); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100001', 'CS-003', 60); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100001', 'CS-004', 68); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100001', 'CS-221', 80); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100001', 'EE-001', 89); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100001', 'EE-002', 84); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100001', 'EE-003', 70); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100002', 'CS-001', 59); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100002', 'CS-002', 76); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100002', 'CS-003', 50); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100002', 'CS-004', 81); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100002', 'CS-221', 72); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100002', 'EE-001', 65); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100002', 'EE-002', 94); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100002', 'EE-003', 68); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100003', 'CS-001', 74); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100003', 'CS-002', 78); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100003', 'CS-003', 85); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100003', 'CS-004', 59); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100003', 'CS-221', 61); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100003', 'EE-001', 93); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100003', 'EE-002', 64); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100003', 'EE-003', 95); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100004', 'CS-001', 88); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100004', 'CS-002', 83); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100004', 'CS-003', 80); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100004', 'CS-004', 91); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100004', 'CS-221', 96); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100004', 'EE-001', 88); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100004', 'EE-002', 89); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100004', 'EE-003', NULL); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100005', 'CS-001', 57); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100005', 'CS-002', 62); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100005', 'CS-003', 83); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100005', 'CS-004', 99); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100005', 'CS-221', 96); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100005', 'EE-001', 54); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100005', 'EE-002', 84); INSERT INTO `SC` (`SNO`, `CNO`, `GRADE`) VALUES ('0100005', 'EE-003', 53);分别构造并插入构造学生表、课程表和分数表的测试数据。
查询和更新
(1)查询身高大于 1.80m 的男生的学号和姓名;
代码:
SELECT `SNO`,`SNAME` FROM `Students` WHERE `HEIGHT` > 1.80 AND `SEX`="男";效果:

(2)查询计算机系秋季所开课程的课程号和学分数;
代码:
SELECT `CNO`,`CREDIT` FROM `Courses` WHERE `SEMESTER` = "秋季" AND `CNO` LIKE "CS%";效果:

(3)查询选修计算机系秋季所开课程的男生的姓名、课程号、学分数、成绩;
代码:
SELECT s.SNAME, c.CNO, c.CREDIT, r.GRADE
FROM `Students` s,`Courses` c,`SC` r
WHERE s.SEX = "男" AND c.SEMESTER = "秋季" AND c.CNO LIKE "CS%" AND r.CNO = c.CNO AND r.SNO = s.SNO;
效果:

(4)查询至少选修一门电机系课程的女生的姓名(假设电机系课程的课程号以EE 开头);
代码:
SELECT DISTINCT s.SNAME
FROM `Students` s,`SC` r
WHERE s.SEX = "女" AND s.SNO = r.SNO AND r.CNO LIKE "EE%";
效果:

(5)查询每位学生已选修课程的门数和总平均成绩;
代码:
SELECT s.SNAME, COUNT(r.CNO) AS "选课数", ROUND(AVG(r.GRADE)) AS "总平均成绩"
FROM `Students` s,`SC` r
WHERE s.SNO = r.SNO GROUP BY s.SNAME;
效果:

(6)查询每门课程选课的学生人数,最高成绩,最低成绩和平均成绩;
代码:
SELECT c.CNAME AS "课程名", COUNT(`SNO`) AS "选课人数", MAX(`GRADE`) AS "最高分", MIN(`GRADE`) AS "最低分",ROUND(AVG(`GRADE`)) AS "平均分"
FROM `Courses` c,`SC` r
WHERE c.CNO = r.CNO GROUP BY c.CNO;
效果:

(7)查询所有课程的成绩都在 80 分以上的学生的姓名、学号、且按学号升序排列;
代码:
SELECT `SNAME`,`SNO`
FROM `Students`
WHERE `SNO` NOT IN(
SELECT DISTINCT s.SNO
FROM `Students` s,`SC` r
WHERE s.SNO = r.SNO AND r.GRADE < 80) ORDER BY `SNO` ASC;
效果:

(8)查询缺成绩的学生的姓名,缺成绩的课程号及其学分数;
代码:
SELECT s.SNAME, c.CNO, c.CREDIT
FROM `Students` s,`Courses` c,`SC` r
WHERE s.SNO = r.SNO AND c.CNO = r.CNO AND `GRADE` is NULL;
效果:

(9)查询有一门以上(含一门)三个学分以上课程的成绩低于 70 分的学生的姓名;
代码:
SELECT DISTINCT s.SNAME
FROM `Students` s,`Courses` c,`SC` r
WHERE s.SNO = r.SNO AND c.CNO = r.CNO AND c.CREDIT >= 3 AND r.GRADE < 70;
效果:

(10)查询 1984 年~1986 年出生的学生的姓名,总平均成绩及已修学分数。
代码:
SELECT s.SNAME, ROUND(AVG(r.GRADE)),SUM(c.CREDIT)
FROM `Students` s,`Courses` c,`SC` r
WHERE s.SNO = r.SNO AND c.CNO = r.CNO AND s.BDATE BETWEEN DATE("1984-01-01") AND DATE("1986-12-31") GROUP BY s.SNAME;
效果:

(11) 在 STUDENT 和 SC 关系中,删去 SNO 以’01’开关的所有记录。
代码:
DELETE FROM `Students`
WHERE `SNO` LIKE "01%";
DELETE FROM `SC`
WHERE `SNO` LIKE "01%";
效果:

(12)在STUDENT关系中增加以下记录:<0409101 何平 女 1987-03-02 1.62> <0408130 向阳 男 1986-12-11 1.75>
代码:
INSERT INTO `Students` (`SNO`,`SNAME`,`SEX`,`BDATE`,`HEIGHT`) VALUES('0409101', '何平', '女', '1987-03-02', 1.62);
INSERT INTO `Students` (`SNO`,`SNAME`,`SEX`,`BDATE`,`HEIGHT`) VALUES('0408130', '向阳', '男', '1986-12-11', 1.75);
效果:

(13)将课程 CS-221 的学分数增为3,讲课时数增为60
代码:
UPDATE `Courses`
SET `CREDIT` = 3, `LHOUR` = 60
WHERE `CNO` = "CS-221";
效果:

本文通过一个数据库实验,展示了如何在Navicat环境下操作MySQL数据库,包括创建Student、Courses和SC表,并提供了多条SQL查询和更新语句的示例,涵盖了查询特定条件的学生、课程信息,计算平均成绩、选课人数等复杂操作。

5590

被折叠的 条评论
为什么被折叠?



