实验一 数据库和表的建立
? 实验目的
1. 掌握数据库和表的基础知识 2. 掌握使用创建数据库和表的方法
3. 掌握数据库和表的修改、查看、删除等基本操作方法
? 实验内容和要求
一、数据库的创建
在开始菜单中,启动SQl Server 程序中的“SQL Server Management Studio”,在对象资源管理器窗口中,右键单击“数据库”,选择“新建数据库”,创建成绩管理数据库Grademanager,要求如下表所示:
Grademanager数据库参数表 参数 存储的数据文件路径 参数值 参数 参数值 存储的日志文件路D:\\db\\grademanager_data.mdf D:\\db\\grademanager_log.ldf
径 日志文件初始大小 2MB 日志文件最大值 15MB 日志文件增长量 2MB 数据文件初始大小 5MB 数据文件最大值 数据文件增长量
二、表的创建、查看、修改和删除 1.表的创建
20MB 原来10% 在Grademanager数据库中,右键单击“表”,选择“新建表”命令,创建如下表所示的表: (1)Student表的表结构
字段名称 数据类型 长度 精度 小数位数 Sno Sname Ssex Char 10 0 0 0 0 0 0 0 0 0 0 0 0 是否允许Null值 否 是 是 是 是 是 说明 学号,主码 姓名 性别,取值:男或女 出生日期 系名 专业名 Varchar 8 Char 2 8 16 Sbirthday Date Sdept Char Speciality Varchar 20 特别注意:
为属性Ssex设置约束,需选中属性Ssex行,然后单击菜单中的“表设计器”,选择“CHECK约束”命令,然后按照图1进行设置。
1
图1 设置性别的约束
(2)Course表(课程名称表)的表结构
字段名称 数据类型 长度 精度 小数位数 是否允许Null值 Cno Cname
(3)SC表(成绩表)的表结构
字段名称 数据类型 长度 精度 小数位数 是否允许 Null值 说明 Sno Cno Char Char 10 0 0 5 0 0 否 否 是 学号,外码 课程号,外码 成绩,0~100之间 Char Varchar 5 0 0 0 否 否 说明 课程号,主码 课程名 20 0 Degree Decimal 5 5 1 特别注意:
①为属性Degree 约束,可参照属性Ssex进行设置,“CHECK约束对话框”中的表达式为 Degree>=1 And Degree<=100
②为SC表设置外键Sno和Cno的方法:
右键单击表SC,选择“设计”命令,然后选择菜单“表设计器”中的“关系”命令,打开“外键关系”窗口,选择“添加”按钮,然后单击“表和列规范”后的按钮,按照图2进行设置,即可将SC表中的Cno属性设置为外键。按照相同的方法,将属性Sno也设置为外键。
图2为SC表设置外键Cno
2
2.向上述表中输入如下数据记录
学生关系表Student (右键单击表Student,选择“编辑前200行”) Sno Sname Ssex Sbirthday 男 1987-01-12 女 1988-06-04 女 1989-12-23 男 1988-08-25 Sdept Speciality CS IS MA IS 计算机应用 电子商务 数学 电子商务 20050101 李勇 20050201 刘晨 20050301 王敏 20050202
张立 课程关系表Course 成绩表SC Cno Cname C01 C02 C03 C04
数据库 数学 信息系统 操作系统 Sno Cno Degree 20050101 C01 92 20050101 C02 85 20050101 C03 88 20050201 20050201 20050301 20050301 20050202 C02 90 C03 80 C01 91 C02 75 C01 87 3.修改表结构(找到操作的方法即可,不需要真正地修改表中的属性) (1)向student表中增加“入学时间”列,其数据类型为日期型 (2)将student表中的sdept字段长度改为20 (3)将student表中的Speciality字段删除
? 思考题
1. SQL Server的数据库文件有几种?扩展名分别是什么? 2. 如何实现数据库的备份和还原?
2.在定义基本表语句时,NOT NULL参数的作用是什么? 3.主码可以建立在“值可以为NULL”的列上吗?
3
实验二 单表查询
? 实验目的
1. 掌握SELECT语句的基本用法 2. 使用WHERE子句进行有条件的查询
3. 掌握使用IN和NOT IN,BETWEEN?AND和NOT BETWEEN?AND来缩小查询范围的方法 4. 掌握聚集函数的使用方法
5. 利用LIKE子句实现字符串匹配查询 6. 利用ORDER BY子句对查询结果排序 7. 利用GROUP BY子句对查询结果分组
? 实验内容和要求
一、表结构修改
1.在实验一的所建立的数据库中增加Teacher表,结构如下: 字段名称 数据类型 长度 精度 小数位数 是否允许Null值 Tno Tname Tsex Char Varchar Char 3 8 2 8 0 0 0 0 0 0 0 0 0 否 是 是 是 是 说明 教师号,主码 教师名 性别,取值:男或女 出生日期 所在系 Tbirthday Date Tdept
Char 16 0 2.在实验一的所建立的数据库中增加Teaching表,表结构如下: Teaching表(授课表)的表结构
字段名称 数据类型 长度 精度 小数位数 是否允许Null值 Cno Tno Cterm
3.向上述两表中输入如下数据记录
教师表Student 授课表Teaching Tno Tname 101 李新 102 钱军 Tsex Tbirthday 男 1977-01-12 女 1968-06-04 Tdept CS CS IS IS Cno Tno Cterm C01 101 2 C02 102 1 C03 201 3 C04 202 4 Char Char Tinyint 5 3 1 0 0 0 0 0 0 否 否 是 说明 课程号,外码 教师号,外码 1-8之间 201 王小花 女 1979-12-23 202 张小青 男 1968-08-25
二、完成下面查询 1.查询所有男生信息
4
2.查询年龄大于24岁的女生学号和姓名 3.查询所有教师的Tname、Tdept
4.查询“电子商务”专业的学生姓名、性别和出生日期 5.查询成绩低于90分的学生学号及课号,并按成绩降序排列 6.查询Student表中所有的系名 7.查询“C01”课程的开课学期
8.查询成绩在80分至90之间的学生学号及课号 9.统计有学生选修的课程门数 10.查询成绩为77,88或99的记录 11.计算“C02”课程的平均成绩 12.输出有成绩的学生学号 13.查询所有姓“刘”的学生信息 14.统计输出各系学生的人数
15.查询选修了“C03”课程和学生的学号及其成绩,查询结果按分数的降序排列 16.查询各个课程号及相应的选课人数,并为选课人数取别名为“人数”
17.统计每门课程的选课人数和最高分,并为选课人数和最高分分别取别名为“人数”、“最高
分”
18.统计每个学生的选课门数和考试总成绩,并为选课门数和总成绩分别取别名为“门数”、
“总成绩”,并按选课门数降序排列。
? 思考题
1.聚集函数能否直接使用在:SELECT子句、HAVING子句、WHERE子句、GROUP BY子句中? 2.关键字ALL和DISTINCT有什么不同的含义? 3.SELECT语句中的通配符有几种?含义分别是什么?
4.利用BETWEEN?AND运算符表示数据的范围能否与其他方法表示?怎样表示?
5