没有合适的资源?快使用搜索试试~ 我知道了~
16337233(王凯祺)数据库系统实验11
需积分: 0 0 下载量 105 浏览量
2022-08-03
11:31:52
上传
评论
收藏 341KB PDF 举报
温馨提示
试读
21页
numeric(8,2) check (salary > 29000),primary key (course_id, sec_id, semester, ye
资源详情
资源评论
资源推荐
数据库系统实验 1 实验报告
数据科学与计算机学院 计算机科学与技术 2016 级
王凯祺 16337233
2018 年 10 月 10 日
1 实验 1.1 数据库定义实验
本实验建立大学数据库模式。大学数据库模式由教室(classroom)、院系(department)、课程
科目(course)、导师(instructor)、课程(section)、任教(teaches)、学生(student)、选课(takes)、
推荐(advisor)、时间段(time_slot)、课程约束(prereq)共 11 个表组成。
我采用 Mysql 8.0 来做本次实验。
1.1 定义数据库
创建一个名为 lab 的数据库。
1 create database lab;
这样创建出来的数据库模式是默认的,大小写不敏感。
1.2 定义基本表
在 lab 数据库中创建 11 个表。
1
1 create table classroom
2 (building varchar(15),
3 room_number varchar(7),
4 capacity numeric(4,0),
5 primary key (building, room_number)
6 );
7 create table department
8 (dept_name varchar(20),
9 building varchar(15),
10 budget numeric(12,2) check (budget > 0),
11 primary key (dept_name)
12 );
13 create table course
14 (course_id varchar(8),
15 title varchar(50),
16 dept_name varchar(20),
17 credits numeric(2,0) check (credits > 0),
18
primary key
(course_id),
19 foreign key (dept_name) references department(dept_name)
20 on delete set null
21 );
22 create table instructor
23 (ID varchar(5),
24 name varchar(20) not null,
25 dept_name varchar(20),
26 salary numeric(8,2) check (salary > 29000),
27 primary key (ID),
28 foreign key (dept_name) references department(dept_name)
29 on delete set null
30 );
31 create table section
32 (course_id varchar(8),
33 sec_id varchar(8),
34 semester varchar(6)
35 check (semester in (’Fall’, ’Winter’, ’Spring’, ’Summer’)),
36 year numeric(4,0) check (year > 1701 and year < 2100),
37 building varchar(15),
38 room_number varchar(7),
39 time_slot_id varchar(4),
40 primary k ey (course_id, sec_id, semester, year),
41 foreign k ey (course_id) references course(course_id)
42 on dele te cascade,
43 foreign k ey (building, room_number) references classroom(building, room_number)
44 on dele te set null
45 );
46 create table teaches
47 (ID varchar(5),
48 course_id varchar(8),
49 sec_id varchar(8),
2
50 semester varchar(6),
51 year numeric(4,0),
52 primary k ey (ID, course_id, sec_id, semester, year),
53 foreign k ey (course_id,sec_id, semester, year) references section(course_id,
sec_id, semester,
year
)
54 on dele te cascade,
55 foreign k ey (ID) references instructor(ID)
56 on dele te cascade
57 );
58 create table student
59 (ID varchar(5),
60 name varchar(20) not null,
61 dept_name varchar(20),
62 tot_cred numeric(3,0) check (tot_cred >= 0),
63 primary k ey (ID),
64 foreign k ey (dept_name) references department(dept_name)
65 on dele te set null
66 );
67 create table takes
68 (ID varchar(5),
69 course_id varchar(8),
70 sec_id varchar(8),
71 semester varchar(6),
72 year numeric(4,0),
73 grade varchar(2),
74 primary k ey (ID, course_id, sec_id, semester, year),
75 foreign k ey (course_id,sec_id, semester, year) references section(course_id,
sec_id, semester, year)
76 on dele te cascade,
77 foreign k ey (ID) references student(ID)
78 on dele te cascade
79 );
80 create table advisor
81 (s_ID varchar(5),
82 i_ID varchar(5),
83 primary k ey (s_ID),
84 foreign k ey (i_ID) references instructor (ID)
85 on dele te set null,
86 foreign k ey (s_ID) references student (ID)
87 on dele te cascade
88 );
89 create table time_slot
90 (time_slot_id varchar(4),
91 day varchar(1),
92 start_hr numeric(2) check (start_hr >= 0 and start_hr < 24),
93 start_min numeric(2) check (start_min >= 0 and start_min < 60),
94 end_hr numeric(2) check (end_hr >= 0 and end_hr < 24),
95 end_min numeric(2) check (end_min >= 0 and end_min < 60),
96 primary k ey (time_slot_id, day, start_hr, start_min)
97 );
3
98 create table prereq
99 (course_id varchar(8),
100 prereq_id varchar(8),
101 primary k ey (course_id, prereq_id),
102
foreign k ey
(course_id) references course(course_id)
103 on dele te cascade,
104 foreign k ey (prereq_id) references course(course_id)
105 )
1.3 实验数据准备
实验使用的 DDL 和数据均从 http://www.db-book.com 下载。
1.4 思考题
(1) SQL 语法规定,双引号括定的符号串为对象名称,单引号括定的符号串为常量字符串,那么
什么情况下需要用双引号来界定对象名呢?
在 Mysql 中,当对象名称恰为 SQL 保留字时,需用反引号括定,避免歧义。
(2) 数据库对象的完整引用是“服务器名. 数据库名. 模式名. 对象名”,但通常可以省略服务器
名和数据库名,甚至模式名,直接用对象名访问对象即可。
使用 mysql 进行数据库连接时,已经提供了服务器名,故可以默认省略服务器名。
建立连接后,使用 use database; 选定默认数据库。
省略模式名通常在 from 后面只有一个表,或者有多个表但对象名在这多个表中只出现一次。
1.5 实验总结
通过实验,我能读懂表头信息,相当于
excel
表的第一行。每一列指定一个数据类型用于存放数
据,这类似于 C++ 。primary key 是主键,它默认是索引,可提高查询效率;foreign key 是外键,
用于连接到别的表。
2 实验 1.2 数据基本查询实验
2.1 单表查询(实现投影操作)
查询学生 ID 、姓名。
1 select ID, name from student limit 10;
结果为:
1 +-------+-----------+
2 | ID | name |
3 +-------+-----------+
4 | 1000 | Manber |
5 | 10033 | Zelty |
6 | 10076 | Duan |
7 | 1018 | Colin |
8 | 10204 | Mediratta |
4
9 | 10267 | Rzecz |
10 | 10269 | Hilberg |
11 | 10454 | Ugarte |
12 | 10481 | Grosch |
13
| 10527 | Kieras |
14 +-------+-----------+
15 10 rows in set (0.01 sec)
2.2 单表查询(实现选择操作)
查询 2009 年春季学期开设的课程 ID 。
1 select course_id from section where semester = ’Spring’ and year = ’2009’;
1 +-----------+
2 | course_id |
3
+-----------+
4 | 604 |
5 | 972 |
6 +-----------+
7 2 rows in set (0.01 sec)
2.3 不带分组过滤条件的分组统计查询
统计每个学生选的课程数。
1 select S.ID, S.name, count(T.course_id)
2 from student as S, takes as T
3 where S.ID = T.ID
4 group by S.ID limit 10;
1 +-------+-----------+--------------------+
2 | ID | name | count(T.course_id) |
3 +-------+-----------+--------------------+
4 | 1000 | Manber | 13 |
5 | 10033 | Zelty | 22 |
6 | 10076 | Duan | 14 |
7 | 1018 | Colin | 22 |
8 | 10204 | Mediratta | 12 |
9 | 10267 | Rzecz | 11 |
10 | 10269 | Hilberg | 10 |
11 | 10454 | Ugarte | 18 |
12 | 10481 | Grosch | 17 |
13 | 10527 | Kieras | 21 |
14 +-------+-----------+--------------------+
15 10 rows in set (0.01 sec)
5
剩余20页未读,继续阅读
小埋妹妹
- 粉丝: 22
- 资源: 344
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 111111111111111111111
- 汉诺塔python代码递归
- 汉诺塔python代码递归
- 汉诺塔python代码递归
- MySQL 8.0 实战教程从入门到项目实战.docx
- 汉诺塔问题是一个经典的递归问题 在这个问题中,我们有三个塔座(通常被称为A、B和C),并且我们有一堆大小不同的盘子,每个盘子都可
- TB-03 二次开发环境搭建指导
- 汉诺塔问题是一个经典的递归问题 在这个问题中,我们有三个塔座(通常被称为A、B和C),并且我们有一堆大小不同的盘子,每个盘子都可
- 汉诺塔问题是一个经典的递归问题 在这个问题中,我们有三个塔座(通常被称为A、B和C),并且我们有一堆大小不同的盘子,每个盘子都可
- 遗传粒子群算法(GA),MATLAB源代码,解决旅行商问题(TSP)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0