数据库实验 4月19日 4月26日 5月10日

建立一个“选课管理”的数据库。(表结构及内容如下)
说明:
(a)表的建立和查询只能使用 SQL 语句
(b)表建立的同时请指定主码,和各个字段是否能为空;
(c)请根据实际情况选择数据类型,实现一定的完整性约束,例如性别只
能是‘男’或者‘女’
(d)请在课程表中设定外键(先修课)
数据库实验 4月19日 4月26日 5月10日_第1张图片

 数据库实验 4月19日 4月26日 5月10日_第2张图片

    数据库实验 4月19日 4月26日 5月10日_第3张图片       数据库实验 4月19日 4月26日 5月10日_第4张图片

  1、首先创建一个数据库,名为my1

2、创建各个数据库

数据库实验 4月19日 4月26日 5月10日_第5张图片

 unsigned:无符号

primary key:主键,一个数据表只能有一个主键

enum:枚举类型,从枚举列表中取一个

tinyint unsigned:无符号的数据类型tinyint,字节数为1,无符号取值范围为0-255

 default默认约束关键词,设置默认值

数据库实验 4月19日 4月26日 5月10日_第6张图片

数据库实验 4月19日 4月26日 5月10日_第7张图片

数据库实验 4月19日 4月26日 5月10日_第8张图片

 foreign key(教师编号) references 教师表(教师编号)

教师编号为外键,数据是教师表里面的教师编号

3、添加数据

学生表:

课程表:在创建课程表时,是将先修课作为外键使用的,所以直接写 课程号=1的先修课是课程号=5 系统会报错,如图所示:

  所以需要先将所有课程的先修课那一列的值全部设置为NULL,系统才不会报错,如图所示:

数据库实验 4月19日 4月26日 5月10日_第9张图片

 数据库实验 4月19日 4月26日 5月10日_第10张图片

 然后再用update语句将先修课的值给补上,例如1号课程的先修课为5号课程,如图所示:

 数据库实验 4月19日 4月26日 5月10日_第11张图片

教师表:

数据库实验 4月19日 4月26日 5月10日_第12张图片

选课表:

数据库实验 4月19日 4月26日 5月10日_第13张图片

 4、查看结果

数据库实验 4月19日 4月26日 5月10日_第14张图片

数据库实验 4月19日 4月26日 5月10日_第15张图片

完成如下操作:
(1) 查询‘CS’系全体老师的信息;
数据库实验 4月19日 4月26日 5月10日_第16张图片

(2) 查询全体学生的姓名及出生日期;
数据库实验 4月19日 4月26日 5月10日_第17张图片

(3) 查询年龄不大于 20 岁的CS’系学生的信息;
数据库实验 4月19日 4月26日 5月10日_第18张图片

(4) 查询年龄不在 1820 岁的学生信息;

数据库实验 4月19日 4月26日 5月10日_第19张图片

数据库实验 4月19日 4月26日 5月10日_第20张图片

(5) 查询‘CS’和‘IS’系老师的姓名和年龄;
数据库实验 4月19日 4月26日 5月10日_第21张图片

(6) 查询姓名最后一个字为‘敏’的老师信息;
数据库实验 4月19日 4月26日 5月10日_第22张图片

 注:下划线不能有空格,否则报错

(7) 查询基础课程(没有先行课)的信息;
数据库实验 4月19日 4月26日 5月10日_第23张图片

(8) 查询老师的总人数;
数据库实验 4月19日 4月26日 5月10日_第24张图片

(9) 计算选修 5 号课程的学生的平均分、最高分和最低分;
数据库实验 4月19日 4月26日 5月10日_第25张图片

(10) 求每门课程的选修人数;
数据库实验 4月19日 4月26日 5月10日_第26张图片

(11) 求选修人数超过 3 人的课程信息;
数据库实验 4月19日 4月26日 5月10日_第27张图片

(12) 查询每个学生及其选修课程的情况;
数据库实验 4月19日 4月26日 5月10日_第28张图片

(13) 查询每一门课的间接先修课的先修课(先修课的先修课的先修课);
数据库实验 4月19日 4月26日 5月10日_第29张图片

(14) 查询选修‘数据结构’课程并且成绩在 80 分以上的学生信 息;

(15) 查询‘CS’系比‘IS’系某一学生年龄小的学生姓名和年龄。

(16) 查询没有选修‘操作系统’课程的‘CS’系的学生姓名;(
数据库实验 4月19日 4月26日 5月10日_第30张图片

错误写法:

注:

       可以看到上述写法答案是正确的,但并不符合题意,上述写法写的是查询没有选修课程号为4的‘CS’系的学生姓名。作为创建表的人,我们自己是知道“操作系统”的课程号为4,但面向用户的选课表里只有课程号为4,用户并不清楚课程号4对应的是什么课程

      同理,18题19题都是一样的,如图所示:

数据库实验 4月19日 4月26日 5月10日_第31张图片

数据库实验 4月19日 4月26日 5月10日_第32张图片  

(17) 查询选修了全部课程的学生姓名;

(18) 查询讲授‘PASCAL 语言’课程所有老师的信息;
数据库实验 4月19日 4月26日 5月10日_第33张图片

(19) 查询李可老师所讲授的所有课程;
数据库实验 4月19日 4月26日 5月10日_第34张图片

(20) 查询选修了李可老师所讲授的所有课程的学生姓名;

(21) 查询‘CS’系老师讲授的所有课程信息;
数据库实验 4月19日 4月26日 5月10日_第35张图片
另一种写法: 数据库实验 4月19日 4月26日 5月10日_第36张图片

 上述写法存在一定缺陷,结果有重复,可以在select后面写关键词distinct 即可消除重复

(22) 查询每个老师的授课情况;
数据库实验 4月19日 4月26日 5月10日_第37张图片

(23) 将‘CS’系所有学生的选课成绩加 1 分;
数据库实验 4月19日 4月26日 5月10日_第38张图片

24) 建立‘CS’系选修‘操作系统’课程的学生信息视图。
数据库实验 4月19日 4月26日 5月10日_第39张图片

(25) 建立‘CS’系选修‘操作系统’课程及其成绩的视图;
数据库实验 4月19日 4月26日 5月10日_第40张图片

数据库实验 4月19日 4月26日 5月10日_第41张图片

数据库实验 4月19日 4月26日 5月10日_第42张图片

数据库实验 4月19日 4月26日 5月10日_第43张图片

 

 

 

你可能感兴趣的:(数据库,mysql)