数据库原理实验指导实验指导书下载链接:数据库原理实验指导_陈剑英
数据库版本:MySQL 8.0.26
- 一、表结构
- 二、创建Student、Teacher、Course、SC表
- 三、插入数据到Student、Teacher、Course、SC表
- 四、查询建表结果
- 五、实验三 SQL的简单查询功能
- 1. 查询所有教师的教工号、姓名和电话号码信息;
- 2. 查询“计算机”系的所有副教授的基本信息;
- 3. 查询所有女同学的姓名及所在的系,显示结果不允许重复出现;
- 4. 查询各教师的教工号、姓名、工资及按工资的95%发放的预发工资,查询结果列名用中文描述,其中,预发工资列名为“预发95%的工资”;
- 5. 假设学号的5个数字中,前2位代表年级,后3位为序号,检索计算机系2006级总学分在58~85分的学生信息,并按学号降序排列;
- 6. 查询平均成绩最高的前两名同学的学号及平均成绩;
- 7. 查询课程号不为 “1”、“4” 和 “7” 的课程信息;
- 8. 查询所有姓 “张” 或 “刘” 或 “高” 的学生信息;
- 9. 查询每个系有多少个同学;
- 10. 查询各课程的平均成绩并按成绩降序排列;
- 11. 查询至少有两门课在90分以上的学生学号及90分以上的课程数;
- 12. 统计每门课程的选课人数、平均成绩、最高成绩、最低成绩;
- 13. 列出课程表中有先行课的课程名;
- 六、实验四 SQL的复杂查询功能
- 1. 查询选修了 “3” 号课程且成绩在70分以上的学生信息;
- 2. 查询所有不比 “电子工程” 系的所有学生年龄大的其他系的学生信息;
- 3. 查询选修了 “3” 号课程的学生姓名、成绩及任课教师姓名;
- 4. 查询开设的课程中选课人数不足15人的课程号及人数信息;
- 5. 查询选修课程数低于3门的学生信息;
- 6. 查询没有选修课程的同学的基本信息;
- ==7. 查询既选修了 “3” 号又选修了 “4” 号课程的学生姓名、课程名及成绩;==
- ==8. 查询同时选修了 “ *** 作系统” 课程和 “数据库原理” 课程的学生名单;==
- 9. 查询所有同学的基本信息及选课情况(包含为选课同学的信息);
- 10. 列出所有参加了数据库课程考试的学生姓名和成绩;
- 11. 查询所有学生和教师的姓名(允许重名)并表示类型(学生 / 老师);
- ==12. 查询每一课程的间接选修课,以 “课程名”、“间接选修课名” 作列名;==
- ==13. 列出所有没有选修 “数据结构” 课程的学生的学号、姓名、所在院系;==
-- 如果manage数据库不存在,就创建manage数据库 CREATE DATAbase IF NOT EXISTS manage; -- 切换到manage数据库 USE manage; -- 如果存在Student、Teacher、Course、SC表,则删除 DROp TABLE IF EXISTS Student; DROP TABLE IF EXISTS Teacher; DROP TABLE IF EXISTS Course; DROP TABLE IF EXISTS SC; -- 创建Student表 CREATE TABLE Student( Sno CHAR(5) NOT NULL COMMENT '学号,主码', Sname VARCHAR(10) COMMENT '姓名', Ssex CHAR(2) COMMENT '性别', Sbirth DATE COMMENT '出生日期', Sdept VARCHAR(20) COMMENT '所在系名', Sparent VARCHAR(20) COMMENT'家长', PRIMARY KEY (Sno) )ENGINE=InnoDB DEFAULT CHARSET=UTF8; -- 创建Teacher表 CREATE TABLE Teacher( Tno INT NOT NULL AUTO_INCREMENT COMMENT '教工号,主码', Tname CHAR(10) COMMENT '姓名', Tsex CHAR(2) DEFAULT '男' CHECK (Tsex IN ('男','女')) COMMENT '性别,默认为‘男’', Tphone VARCHAR(12) COMMENT '电话', Tdept VARCHAR(20) COMMENT '系名', Taddr VARCHAR(30) COMMENT '家庭住址', Tprof VARCHAR(10) COMMENT '职称', Tpay DECIMAL(8,2) COMMENT '工资', Tweight INT COMMENT '体重', PRIMARY KEY (Tno) )ENGINE=InnoDB DEFAULT CHARSET=UTF8; -- 创建Course表 CREATE TABLE Course( Cno CHAR(3) NOT NULL COMMENT '课程号,主码', Cname VARCHAR(20) COMMENT '课程名称', Cpno CHAR(3) COMMENT '先行课号', Credit DECIMAL(3,1) COMMENT '学分', PRIMARY KEY(Cno) )ENGINE=InnoDB DEFAULT CHARSET=UTF8; -- 创建SC表 CREATE TABLE SC( Sno CHAR(5) NOT NULL COMMENT '学号,主属性,外码', Cno CHAR(3) NOT NULL COMMENT '课程号,主属性,外码', Tno INT NOT NULL COMMENT '教工号,主属性,外码', Grade DECIMAL(5,1) COMMENT '成绩,0<=Grade<=100', FOREIGN KEY(Sno) REFERENCES Student(SnO), FOREIGN KEY(Cno) REFERENCES Course(Cno), FOREIGN KEY(Tno) REFERENCES Teacher(Tno) )ENGINE=InnoDB DEFAULT CHARSET=UTF8;三、插入数据到Student、Teacher、Course、SC表
-- 插入数据到Student表 INSERT INTO Student(Sno,Sname,Ssex,Sbirth,Sdept,Sparent) VALUES ('06001','张睿智','男',19940605,'计算机',NULL); INSERT INTO Student(Sno,Sname,Ssex,Sbirth,Sdept,Sparent) VALUES ('06002','李强','男',19921113,'计算机',NULL); INSERT INTO Student(Sno,Sname,Ssex,Sbirth,Sdept,Sparent) VALUES ('06003','王士文','男',19940708,'外国语',NULL); INSERT INTO Student(Sno,Sname,Ssex,Sbirth,Sdept,Sparent) VALUES ('06004','欧阳开元','男',19940509,'电子工程',NULL); INSERT INTO Student(Sno,Sname,Ssex,Sbirth,Sdept,Sparent) VALUES ('06005','张明明','女',19940320,'电子工程',NULL); INSERT INTO Student(Sno,Sname,Ssex,Sbirth,Sdept,Sparent) VALUES ('06006','陈东升','男',19930609,'计算机',NULL); INSERT INTO Student(Sno,Sname,Ssex,Sbirth,Sdept,Sparent) VALUES ('06007','胡晓明','女',19930721,'电子工程',NULL); INSERT INTO Student(Sno,Sname,Ssex,Sbirth,Sdept,Sparent) VALUES ('06008','乔羽','女',19941110,'外国语',NULL); INSERT INTO Student(Sno,Sname,Ssex,Sbirth,Sdept,Sparent) VALUES ('06009','刘文红','女',19920612,'外国语',NULL); INSERT INTO Student(Sno,Sname,Ssex,Sbirth,Sdept,Sparent) VALUES ('06010','高叔阳','男',19940815,'计算机',NULL); -- 插入数据到Teacher表 INSERT INTO Teacher(Tno,Tname,Tsex,Tphone,Tdept,Taddr,Tprof,Tpay,Tweight) VALUES (1,'刘明','男','13980234566','计算机','成都市','教授',5467.89,56); INSERT INTO Teacher(Tno,Tname,Tsex,Tphone,Tdept,Taddr,Tprof,Tpay,Tweight) VALUES (2,'王芳','女','13980280236','计算机','成都市','副教授',4890.23,47); INSERT INTO Teacher(Tno,Tname,Tsex,Tphone,Tdept,Taddr,Tprof,Tpay,Tweight) VALUES (3,'李庆','男','13989701249','外国语','成都市','讲师',3786.45,64); INSERT INTO Teacher(Tno,Tname,Tsex,Tphone,Tdept,Taddr,Tprof,Tpay,Tweight) VALUES (4,'曾书','男','18980027665','电子工程','成都市','副教授',4998.43,62); INSERT INTO Teacher(Tno,Tname,Tsex,Tphone,Tdept,Taddr,Tprof,Tpay,Tweight) VALUES (5,'杨晓','女','15065432168','外国语','成都市','副教授',4567.00,48); INSERT INTO Teacher(Tno,Tname,Tsex,Tphone,Tdept,Taddr,Tprof,Tpay,Tweight) VALUES (6,'刘晓','男','18980027366','电子工程','成都市','教授',5687.20,NULL); -- 插入数据到Course表 INSERT INTO Course(Cno,Cname,Cpno,Credit) VALUES ('1','数据库','5',4.0); INSERT INTO Course(Cno,Cname,Cpno,Credit) VALUES ('2','数学',NULL,2.0); INSERT INTO Course(Cno,Cname,Cpno,Credit) VALUES ('3','信息系统','1',4.0); INSERT INTO Course(Cno,Cname,Cpno,Credit) VALUES ('4',' *** 作系统','6',3.5); INSERT INTO Course(Cno,Cname,Cpno,Credit) VALUES ('5','数据结构','7',4.0); INSERT INTO Course(Cno,Cname,Cpno,Credit) VALUES ('6','数据处理',NULL,2.0); INSERT INTO Course(Cno,Cname,Cpno,Credit) VALUES ('7','PASCAL语言','6',3.0); -- 插入数据到SC表 INSERT INTO SC(Sno,Cno,Tno,Grade) VALUES ('06001','2',4,67.0); INSERT INTO SC(Sno,Cno,Tno,Grade) VALUES ('06001','3',5,78.0); INSERT INTO SC(Sno,Cno,Tno,Grade) VALUES ('06001','5',2,89.0); INSERT INTO SC(Sno,Cno,Tno,Grade) VALUES ('06002','3',5,90.0); INSERT INTO SC(Sno,Cno,Tno,Grade) VALUES ('06002','4',1,98.0); INSERT INTO SC(Sno,Cno,Tno,Grade) VALUES ('06004','3',5,89.0); INSERT INTO SC(Sno,Cno,Tno,Grade) VALUES ('06004','4',1,92.0); INSERT INTO SC(Sno,Cno,Tno,Grade) VALUES ('06004','6',3,58.0); INSERT INTO SC(Sno,Cno,Tno,Grade) VALUES ('06008','1',3,78.0); INSERT INTO SC(Sno,Cno,Tno,Grade) VALUES ('06009','1',3,70.0);四、查询建表结果
- Student表
- Teacher表
- Course表
- SC表
SELECT Tno,Tname,Tphone FROM Teacher;2. 查询“计算机”系的所有副教授的基本信息;
SELECt * FROM Teacher WHERe Tdept = '计算机' AND Tprof = '副教授';3. 查询所有女同学的姓名及所在的系,显示结果不允许重复出现;
SELECt DISTINCT Sname, Sdept FROM Student WHERe Ssex = '女';4. 查询各教师的教工号、姓名、工资及按工资的95%发放的预发工资,查询结果列名用中文描述,其中,预发工资列名为“预发95%的工资”;
SELECt Tno 教工号, Tname 姓名, Tpay 工资, Tpay * 0.95 AS '预发95%的工资' FROM Teacher;5. 假设学号的5个数字中,前2位代表年级,后3位为序号,检索计算机系2006级总学分在58~85分的学生信息,并按学号降序排列;
SELECt * FROM Student, SC WHERe Student.Sno LIKE '06%' AND Student.Sno = SC.Sno AND SC.Grade >=58 AND Grade <= 85 ORDER BY Student.Sno DESC;6. 查询平均成绩最高的前两名同学的学号及平均成绩;
SELECt Sno, AVG(Grade) FROM SC GROUP BY Sno ORDER BY AVG(Grade) DESC LIMIT 2;7. 查询课程号不为 “1”、“4” 和 “7” 的课程信息;
SELECt * FROM Course WHERe Cno NOT IN ('1','4','7');8. 查询所有姓 “张” 或 “刘” 或 “高” 的学生信息;
SELECt * FROM Student WHERe Sname LIKE '张%' OR Sname LIKE '刘%' OR Sname LIKE '高%';9. 查询每个系有多少个同学;
SELECt Sdept, COUNT(Sno) FROM Student GROUP BY Sdept;10. 查询各课程的平均成绩并按成绩降序排列;
SELECt Course.Cname, AVG(SC.Grade) FROM Course,SC WHERe Course.Cno=SC.Cno GROUP BY Course.Cname ORDER BY AVG(SC.Grade) DESC;11. 查询至少有两门课在90分以上的学生学号及90分以上的课程数;
SELECt Sno, COUNT(Cno) FROM SC WHERe Grade >= 90 GROUP BY Sno HAVINg COUNT(DISTINCT Cno) >= 2;12. 统计每门课程的选课人数、平均成绩、最高成绩、最低成绩;
SELECt Cname, COUNT(Sno), AVG(Grade), MAX(Grade), MIN(Grade) FROM SC, Course WHERe Course.Cno = SC.Cno GROUP BY Cname;13. 列出课程表中有先行课的课程名;
SELECt Cname FROM Course WHERe Cpno != 'NULL';六、实验四 SQL的复杂查询功能 1. 查询选修了 “3” 号课程且成绩在70分以上的学生信息;
SELECt * FROM SC WHERe Cno=3 AND Grade >= 70;2. 查询所有不比 “电子工程” 系的所有学生年龄大的其他系的学生信息;
SELECt * FROM Student WHERe Sdept != '电子工程' AND Sbirth >= (SELECt MAX(Sbirth) FROM Student WHERe Sdept = '电子工程');3. 查询选修了 “3” 号课程的学生姓名、成绩及任课教师姓名;
SELECt Student.Sname, SC.Grade, Teacher.Tname FROM Student, Teacher, SC WHERe SC.Sno = Student.Sno AND SC.Tno = Teacher.Tno AND Cno = '3';4. 查询开设的课程中选课人数不足15人的课程号及人数信息;
SELECt Cno, COUNT(Sno) FROM SC GROUP BY Cno HAVINg COUNT(Sno) <= 15;5. 查询选修课程数低于3门的学生信息;
SELECt Student.Sno, Student.Sname, Student.Ssex, Student.Sbirth, Student.Sdept FROM Student, SC WHERe Student.Sno = SC.Sno GROUP BY SC.Sno HAVINg COUNT(SC.Cno) < 3;6. 查询没有选修课程的同学的基本信息;
SELECt * FROM Student WHERe Sno NOT IN (SELECt Sno FROM SC);7. 查询既选修了 “3” 号又选修了 “4” 号课程的学生姓名、课程名及成绩; 8. 查询同时选修了 “ *** 作系统” 课程和 “数据库原理” 课程的学生名单; 9. 查询所有同学的基本信息及选课情况(包含为选课同学的信息);
SELECt * FROM Student LEFT JOIN SC ON Student.Sno = SC.Sno;10. 列出所有参加了数据库课程考试的学生姓名和成绩;
SELECt Student.Sname, SC.Grade FROM Student, SC, Course WHERe Student.Sno = SC.Sno AND SC.Cno = Course.Cno AND Course.Cname = '数据库';11. 查询所有学生和教师的姓名(允许重名)并表示类型(学生 / 老师);
SELECt 姓名, 标识 FROM (SELECt Sname AS 姓名, '学生' AS 标识 FROM Student UNIOn ALL SELECt Tname AS 姓名, '老师' AS 标识 FROM Teacher) Teacher_Student;12. 查询每一课程的间接选修课,以 “课程名”、“间接选修课名” 作列名; 13. 列出所有没有选修 “数据结构” 课程的学生的学号、姓名、所在院系;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)