数据库报告.docx
《数据库报告.docx》由会员分享,可在线阅读,更多相关《数据库报告.docx(23页珍藏版)》请在冰豆网上搜索。
![数据库报告.docx](https://file1.bdocx.com/fileroot1/2022-12/28/6a21e7a1-ef93-47c1-8f62-8c96af3d25cd/6a21e7a1-ef93-47c1-8f62-8c96af3d25cd1.gif)
数据库报告
实验报告
(2012/2013学年第一学期)
课程名称
数据库原理
实验名称
1、数据库表的建立与管理
2、查询技术的应用
3、数据库的表中数据的操作
4、视图练习
实验时间
12月5、11月28、11月21
指导单位
指导教师
学生姓名
班级学号
学院(系)
理学院
专业
数据库原理第一次实验
一、实验内容:
数据库表的建立与管理
二、实验目的:
学习数据库及表的建立、删除、更新等操作。
注:
本次实验题目,除了特殊要求,以T-SQL为主,并将所有语句标注好题号,留存在查询界面上,方便检查。
三、实验题目:
1、创建一名为‘test’的数据库;
2.在“test”数据库中新建一张部门表“部门”,输入列:
name(CHAR,10位),ID(CHAR,7位),manager(CHAR,10位)各列均不能为空值。
3、在“test”数据库中新建一张员工表,命名为“员工”。
在表中输入以下各列:
name(CHAR,10位),persONID(CHAR,7位),Sex(CHAR,7位),birthday(datetime),deptID(CHAR,7位),各列均不能为空值。
4、修改表的操作练习:
1)将‘部门’表中的列ID设为主键;
2)将‘员工’表中persONID设为主键,并将deptID设置为外键,关联到‘部门’表上的‘ID’列;
3)在‘部门’表中,添加列quantity(CHAR,5);
4)删除‘员工’表中的列‘sex’;
5)修改‘员工’表中列name为(varCHAR,8)
5、1)在数据库test中新建表scores,输入以下列:
ID(CHAR,8位)主键,
C语言numeric(3,1),IT英语numeric(3,1),数据库numeric(3,1),
软件基础numeric(3,1),平均成绩。
四门学科都不能为空,并且平均成绩为四门学科的平均分;
2)为表scores中的四项成绩添加default约束:
使其默认值为0;
3)为表scores中的四项成绩添加check约束:
是每项成绩在0到100之间。
6、删除department表,并删除数据库test。
4、实验过程
(1)、
CREATEDATABASEtest
USEtest
(2)、
CREATETABLEdepartment
(IDCHAR(7)NOTNULL,
nameCHAR(10)NOTNULL,
managerCHAR(10)NOTNULL)
(3)、CREATETABLEworker
(persONIDCHAR(7)NOTNULL,
nameCHAR(10)NOTNULL,
sexCHAR(7)NOTNULL,
birthdaydatetimeNOTNULL,
deptIDCHAR(7)NOTNULL)
(4)、ALTERTABLEdepartmentADDPRIMARYKEY(ID)
ALTERTABLEworkerADDPRIMARYKEY(persONID)
ALTERTABLEworkerADDconstraint外键约束FOREIGNKEY(deptID)REFERENCESdepartment(ID)
ALTERTABLEdepartmentADDquantityCHAR(5)
ALTERTABLEworkerDROPCOLUMNsex
ALTERTABLEworkerALTERCOLUMNnamevarCHAR(8)
(5)、CREATETABLEscores
(IDCHAR(8)PRIMARYKEYNOTNULL,
C语言numeric(3,1)NOTNULL,
IT英语numeric(3,1)NOTNULL,
数据库numeric(3,1)NOTNULL,
软件基础numeric(3,1)NOTNULL,
平均成绩AS(C语言+IT英语+数据库+软件基础)/4)
ALTERTABLEscoresADDCONSTRAINTC语言_defaultDEFAULT'0'FORC语言
ALTERTABLEscoresADDCONSTRAINTIT英语_defaultDEFAULT'0'FORIT英语
ALTERTABLEscoresADDCONSTRAINT数据库_defaultDEFAULT'0'FOR数据库
ALTERTABLEscoresADDCONSTRAINT软件基础_defaultDEFAULT'0'FOR软件基础
ALTERTABLEscoresADDCONSTRAINTC语言CHECK(C语言BETWEEN0AND100)
ALTERTABLEscoresADDCONSTRAINTIT英语CHECK(IT英语BETWEEN0AND100)
ALTERTABLEscoresADDCONSTRAINT数据库CHECK(数据库BETWEEN0AND100)
ALTERTABLEscoresADDCONSTRAINT软件基础CHECK(软件基础BETWEEN0AND100)
(6)、DROPtabledepartmentcasecadeconstraint外键约束;
USEMASTER;
DROPDATABASEtest;
5、
由以下可见,数据库test及表已建立完成
六心得体会
删除department表的过程未能实现,命令不能删除外键,和伙伴讨论没有结果,不过打开建立的表就可以右键轻松删除了,其他的比较顺利。
数据库原理第二次实验
一、实验内容:
查询技术的应用
二、实验目的:
1、掌握SELECT语句的基本语法
2、掌握连接查询的表示
3、掌握数据汇总的方法
4、掌握SELECT语句的GROUPBY子句的作用和使用方法
5、掌握SELECT语句的ORDERBY子句的作用和使用方法
三、实验内容
1、创建员工管理数据库(compy)及相应的四张表:
Employees:
员工信息表
Departments:
部门信息表
Salary:
员工薪水信息表
PurchASe:
员工购物信息表
各表中属性的定义可根据表中的记录加以设定,均以编号为主键,例如可定义Departments表结构如下:
列名
数据类型
长度
是否允许空值
说明
部门编号
char
3
否
部门编号主键
部门名称
char
20
否
部门名称
备注
text
16
是
备注
向表中填入数据
A、向Departments表中加入表2所示的记录
编号
部门名称
备注
1
财务部
NULL
2
人力资源部
NULL
3
生产部
NULL
4
采购部
NULL
5
销售部
NULL
B、向Employees表中加入表1所示的记录
编号
姓名
地址
邮编
电话
部门号
出生日期
性别
000001
张晓强
上海
230027
3333556
2
1956-1-1
1
010008
柳树
合肥
230027
3131359
1
1966-1-1
1
002001
许静
北京
230026
3132359
1
1972-1-1
1
020018
李可
武汉
230026
3693564
1
1950-1-1
0
102201
张三丰
西安
123456
3635346
5
1962-1-1
0
102208
白眉
南京
123456
3458965
5
1955-1-1
1
108991
胡适
昆明
123456
4568921
3
1969-1-1
1
111006
成吉思汗
海口
123456
3458145
5
1964-1-1
1
210678
萧然
成都
123456
3454565
3
1967-1-1
1
C、向Salary表中加入表3所示的记录
编号
收入
支出
000001
2100
123
010008
1582
88
002001
2569
185
020018
1987
79
102201
2066
108
102208
2980
210
108991
3259
281
111006
2860
198
210678
2347
180
D、向Purchase表中加入表4所示的记录
员工编号
商品
购买数量
000001
01
3
000001
03
1
002001
01
5
020018
03
6
108991
11
1
000001
11
3
020018
01
5
201678
02
1
020018
11
2
2、简单查询
(1)查询1956,1962,1964年出生的员工记录;
(2)查询性别为1的员工记录;
(3)查询名字中包含‘白’字的所有雇员信息;
(4)查询不姓‘李’或者‘胡’,并且名字为三个字的雇员的记录(注:
“姓名”列的数据类型必须定义为varCHAR,想想为什么?
)。
3、连接查询的使用
(1)查询每个雇员的情况以及其薪水情况
(2)查询收入高于编号为102201的员工收入的职工信息
4.数据汇总
(1)求财务部员工的平均净收入
(2)求财务部雇员的总人数
5.GROUPBY,ORDERBY子句的使用
(1)求各部门的雇员数
(2)将各雇员的情况按薪水由低到高排列
6、(选做题)查找比所有财务部的员工的收入都高的员工的姓名;
4、实验过程
Sql语言如下:
1、CREATEDATABASEcompy
usecompy
CREATETABLEDepartments(
部门编号CHAR(10)PRIMARYKEYNOTNULL,
部门名称CHAR(20)NOTNULL,
备注text
);
CREATETABLEEmployees(
编号CHAR(10)PRIMARYKEYNOTNULL,
姓名VARCHAR(20)NOTNULL,
地址CHAR(30)NOTNULL,
邮编CHAR(10)NOTNULL,
电话CHAR(11)NOTNULL,
部门号CHAR(3)NOTNULL,
出生日期DATENOTNULL,
性别CHAR
(2)NOTNULL);
CREATETABLESalary(
编号CHAR(10)PRIMARYKEYNOTNULL,
收入INTdefault0,
支出INTdefault0,
);
CREATETABLEPurchase(
员工编号CHAR(10)NOTNULL,
商品CHAR(3)NOTNULL,
PRIMARYKEY(员工编号,商品)
);
INSERTINTODepartmentsVALUES('1','财务部',NULL);
INSERTINTODepartmentsVALUES('2','人力资源部',NULL);
INSERTINTODepartmentsVALUES('3','生产部',NULL);
INSERTINTODepartmentsVALUES('4','采购部',NULL);
INSERTINTODepartmentsVALUES('5','销售部',NULL);
INSERTINTOEmployeesVALUES('000001','张晓强','上海','230027','3333556','2','1956-1-1','1')
INSERTINTOEmployeesVALUES('010008','柳树','合肥','230027','3131359','1','1966-1-1','1')
INSERTINTOEmployeesVALUES('002001','许静','北京','230026','3132359','1','1972-1-1','1')
INSERTINTOEmployeesVALUES('020018','李可','武汉','230026','3693564','1','1950-1-1','0')
INSERTINTOEmployeesVALUES('102201','张三丰','西安','123456','3635364','5','1962-1-1','0')
INSERTINTOEmployeesVALUES('102208','白眉','南京','123456','3458965','5','1955-1-1','1')
INSERTINTOEmployeesVALUES('108991','胡适','昆明','123456','4568921','3','1969-1-1','1')
INSERTINTOEmployeesVALUES('111006','成吉思汗','海口','123456','3458145','5','1964-1-1','1')
INSERTINTOEmployeesVALUES('210678','萧然','成都','123456','3454565','3','1967-1-1','1');
INSERTINTOSalaryVALUES('000001','2100','123')
INSERTINTOSalaryVALUES('010008','1582','88')
INSERTINTOSalaryVALUES('002001','2569','185')
INSERTINTOSalaryVALUES('020018','1987','79')
INSERTINTOSalaryVALUES('102201','2066','108')
INSERTINTOSalaryVALUES('102208','2980','210')
INSERTINTOSalaryVALUES('108991','3259','281')
INSERTINTOSalaryVALUES('111006','2860','198')
INSERTINTOSalaryVALUES('210678','2347','180');
INSERTINTOPurchaseVALUES('000001','01','3');
INSERTINTOPurchaseVALUES('000001','03','1');
INSERTINTOPurchaseVALUES('002001','01','5');
INSERTINTOPurchaseVALUES('020018','03','6');
INSERTINTOPurchaseVALUES('108991','11','1');
INSERTINTOPurchaseVALUES('000001','11','3');
INSERTINTOPurchaseVALUES('020018','01','5');
INSERTINTOPurchaseVALUES('201678','02','1');
INSERTINTOPurchaseVALUES('020018','11','2');
2、简单查询
SELECT*FROMPurchase
SELECT*
FROMEmployees
WHERE出生日期LIKE'%1956%'or出生日期LIKE'%1962%'or出生日期LIKE'%1964%';
SELECT*FROMEmployeesWHERE性别='1';
SELECT*FROMEmployeesWHERE姓名LIKE'%白%';
SELECT*
FROMEmployees
WHERE姓名notLIKE'李%'
AND姓名notLIKE'胡%'
ANDlen(姓名)=3;
3、连接查询的使用
SELECTEmployees.*,Salary.收入
FROMEmployeesinnerjoinSalaryonEmployees.编号=Salary.编号;
SELECTEmployees.*,Salary.收入
FROMEmployeesinnerjoinSalaryonEmployees.编号=Salary.编号
WHERE收入>(SELECT收入FROMSalaryWHERE编号='102201');
4.数据汇总
SELECTAVG(b.收入-b.支出)AS财务部员工的平均净收入
FROMEmployeesASaINNERJOINSalaryASbONa.编号=b.编号
WHERE部门号='1';
SELECTCOUNT(部门号)AS财务部门总人数
FROMEmployees
WHERE部门号='1';
5.GROUPBY,ORDERBY子句的使用
SELECTCOUNT(a.部门号)AS部门人数,b.部门名称
FROMEmployeesASaJOINDepartmentsASbONa.部门号=b.部门编号
groupby(部门名称);
SELECTa.*,b.收入
FROMEmployeesASaINNERJOINSalaryASbONa.编号=b.编号
orderby收入;
5、运行结果及选做题
(1)查询1956,1962,1964年出生的员工记录;
(2)查询性别为1的员工记录;
(3)查询名字中包含‘白’字的所有雇员信息;
(4)查询不姓‘李’或者‘胡’,并且名字为三个字的雇员的记录
(1)查询每个雇员的情况以及其薪水情况
(2)查询收入高于编号为102201的员工收入的职工信息
(1)求财务部员工的平均净收入
(2)求财务部雇员的总人数
(1)求各部门的雇员数
(2)将各雇员的情况按薪水由低到高排列
(选做题)查找比所有财务部的员工的收入都高的员工的姓名;
SELECT姓名
FROMEmployees
WHERE编号IN
(SELECT编号
FROMSalary
WHERE收入>All(SELECT收入FROMSalary
WHERE编号IN(SELECT编号FROMEmployeesWHERE部门号='1')))
运行结果:
数据库原理第三次实验
一、实验内容:
数据库的表中数据的操作。
二、实验目的:
1、学习SQL语句进行表中的数据的插入、更新和删除;
2、学会含有子查询语句的数据更新操作;
2、理解表中列的属性对表中数据的影响。
三、实验准备
试用上次实验创建的员工管理数据库(compy)及相应的四张表(具体见实验2):
Employees:
员工信息表
Departments:
部门信息表
Salary:
员工薪水信息表
PurchASe:
员工购物信息表
四、实验题目:
1、向Employees表中加入一列:
年龄,其值为“当前时间”与“出生日期”差值(提示:
年龄的计算可以使用getdate及year两个日期函数,具体使用参考联机丛书TransactSQL参考)。
2、数据更新:
1)将编号为102201的雇员地址改为“苏州”;
2)将编号为102208的雇员收入降低10%;
3)更改salary表,如果收入和支出的差值小于2000,则将收入提高1000;
3、使用SELECT…INTO进行多行插入:
将每个部门的编号,名称,雇员数,插入到新表DepartmentStatic中。
4、含子查询的数据更新
(1)将地址为合肥的雇员收入增加5%
(2)将收入小于平均收入的雇员的收入增加500元
(3)将财务部的雇员收入减少100
5、删除
删除DepartmentStatic中所有数据
6、(选做)
(1)将总收入大于6000的部门中的雇员收入减少5%
(2)删除收入大于平均收入的雇员的信息,包括Employees,Salary中相关的数据
5、实验过程
1、UPDATEEmployeesSET地址='苏州'WHERE编号='102201'
SELECT*FROMEmployees
2、UPDATESalarySET收入=收入*0.9WHERE编号='102208'
UPDATESalarySET收入=收入+1000
WHEREabs(收入-支出)<2000
3、SELECT*FROMSalary
SELECT部门编号,部门名称,备注
INtoDepartmentStatic
FROMDepartments
SELECT*FROMDepartmentStatic
4、UPDATESalarySET收入=收入*1.05
WHERE编号IN(SELECT编号FROMEmployeesWHERE地址='合肥');
UPDATESalarySET收入=收入+500
WHERE收入<(SELECTAVG(收入)FROMSalary);
UPDATESalarySET收入=收入-100
WHERE编号IN(SELECT编号
FROMEmployees,Departments
WHEREEmployees.部门号=Departments.部门编号andDepartments.部门名称='财务部')
5、TRUNCATETABLEDepartmentStatic/*删除*/
SELECT*FROMDepartmentStatic
六运行结果及选做题
1、向Employees表中加入一列:
年龄
2、数据更新
3、使用SELECT…INTO进行多行插入:
5、删除
选做6、
(1)将总收入大于6000的部门中的雇员收入减少5%
(2)删除收入大于平均收入的雇员的信息,包括Employees,Salary中相关的数据
程序
(1)
UPDATESalarySET收入=收入*0.95
WHERE编号I