四川师范大学数据库实验原理实验报告.docx

上传人:b****6 文档编号:8255345 上传时间:2023-01-30 格式:DOCX 页数:22 大小:815.40KB
下载 相关 举报
四川师范大学数据库实验原理实验报告.docx_第1页
第1页 / 共22页
四川师范大学数据库实验原理实验报告.docx_第2页
第2页 / 共22页
四川师范大学数据库实验原理实验报告.docx_第3页
第3页 / 共22页
四川师范大学数据库实验原理实验报告.docx_第4页
第4页 / 共22页
四川师范大学数据库实验原理实验报告.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

四川师范大学数据库实验原理实验报告.docx

《四川师范大学数据库实验原理实验报告.docx》由会员分享,可在线阅读,更多相关《四川师范大学数据库实验原理实验报告.docx(22页珍藏版)》请在冰豆网上搜索。

四川师范大学数据库实验原理实验报告.docx

四川师范大学数据库实验原理实验报告

四川师范大学计算机学院

实验报告册

院系名称:

计算机科学学院

课程名称:

数据库原理概论

实验学期2014年至2015年第二学期

专业班级:

软件工程4班

姓名:

刘世麟学号:

2013110424

指导教师:

俞晓

实验最终成绩:

实验一熟悉SQLSERVER的环境

(验证型实验2学时

1.目的要求:

1了解SQLServermanagementstudio的使用

2.实验内容:

回答下面每一个问题,写出实验步骤

1在“已注册服务器窗口”中注册sqlserver数据库服务器

展开【数据库引擎】节点,右击LocalServerGroup节点,选择【新建服务器注册】命令,设置相应属性,单击【保存】即可。

2在“对象资源管理器”中创建名字为sc的数据库

展开节点,右击【数据库】节点,选择【新建数据库】命令,在【数据库名称】后填写sc,设置相应属性,单击【确定】即可。

3在sc数据库中创建一个名字为student的基本表

展开【数据库】节点,选择数据库并展开,右击表节点,选择【新建表】命令,设置行列信息,保存即可。

4在查询窗口中里创建名为S_C的数据库

CREATEDATABASES_C

5在查询窗口中使用sql语言创建名字为course的基本表

CREATETABLEcourse

3.主要设备及软件

1PC

2MicrosoftSQLServer2005

实验二建立表格,并插入若干记录

(验证型实验2学时

1.目的要求:

1学会使用CreateTable和Insert语句

2.实验内容

1使用sql语言建立student,course和sc共三张表格(包括主键,外码的指定,分析具体情

况适当给出一些用户自定义的约束.

CREATETABLEStudent

(Snochar(9PRIMARYKEY,

Snamechar(20NOTNULL,

SsexCHAR(2,

SageSMALLINT,

Sdeptchar(20

;

CREATETABLECourse

(Cnochar(4PRIMARYKEY,

Cnamechar(14,

Cpnochar(4,

Ccreditsmallint,

FOREIGNKEY(CpnoREFERENCESCourse(Cno,

;

CREATETABLESC

(Snochar(9,

Cnochar(4,

Gradesmallint,

PRIMARYKEY(Sno,Cno,

FOREIGNKEY(SnoREFERENCESStudent(Sno,

FOREIGNKEY(CnoREFERENCESCourse(Cno,

;

2使用Insert语句向这三张表格里添加至少10条记录(数据如教材56页所示,如果出现错

误,分析错误原因

INSERTINTOStudentVALUES('95001','李勇','男',20,'CS';

INSERTINTOStudentVALUES('95002','刘晨','女',20,'IS';

INSERTINTOStudentVALUES('95003','王敏','女',20,'MA';

INSERTINTOStudentVALUES('95004','张立','男',20,'IS';

SELECT*FROMStudent;

INSERTINTOCourse(Cno,Cname,CcreditVALUES('1','数据库',4;

INSERTINTOCourse(Cno,Cname,CcreditVALUES('2','数学',2;

INSERTINTOCourse(Cno,Cname,CcreditVALUES('3','信息系统',4;

INSERTINTOCourse(Cno,Cname,CcreditVALUES('4','操作系统',3;

INSERTINTOCourse(Cno,Cname,CcreditVALUES('5','数据结构',4;

INSERTINTOCourse(Cno,Cname,CcreditVALUES('6','数据处理',2;

INSERTINTOCourse(Cno,Cname,CcreditVALUES('7','PASCAL语言',4;

UPDATECourseSETCpno='5'WHERECno='1';

UPDATECourseSETCpno='1'WHERECno='3';UPDATECourseSETCpno='6'WHERECno='4';UPDATECourseSETCpno='7'WHERECno='5';UPDATECourseSETCpno='6'WHERECno='7';SELECT*FROMCourse;

INSERTINTOSCVALUES('95001','1',92;INSERTINTOSCVALUES('95001','2',85;INSERTINTOSCVALUES('95001','3',88;INSERTINTOSCVALUES('95002','2',90;INSERTINTOSCVALUES('95002','3',80;SELECT*FROMSC;

3在“对象资源管理器”中实现(1题中的三张表

展开【数据库】节点,单击【表】节点,选择【新建表】,填入如下数据

保存的时候保存为Student就行了

展开【数据库】节点,单击【表】节点,选择【新建表】,填入如下数据

保存的时候保存为Course

设置外键如图所示

展开【数据库】节点,单击【表】节点,选择【新建表】,填入如下数据

保存的时候保存为Course

设置外键如图所示

4在“对象资源管理器”中向这(1题中的三张表添加至少10条记录(数据如教

材56页所示,如果出现错误,分析错误原因

第一张表中插入数据

第二张表中插入数据

第三张表插入数据

3.主要设备及软件

1PC

2MicrosoftSQLServer2005

实验三修改表格结构,修改和删除表格中的数据

(验证型实验4学时

1.目的要求:

1用ALTER语句修改表结构:

添加列,修改列定义,删除列。

使用UPDATE和DELETE

语句修改和删除Student,sc,course表格中的数据。

2.实验内容

如下所示,创建表s,并完成随后的操作

Createtables(snochar(2primarykey,snamechar(10;

1向表中添加属性列status,数据类型为int

ALTERTABLEsADDstatusint;

2向表中添加属性列city,数据类型为varchar(20,并限定其取值范围为“上

海”,“北京”,“天津”之一

ALTERtablesADDcityvarchar(20;

AltertablesaddconstraintCK_citycheck(city='上海'orcity='北京'orcity='天津';

3修改属性列status的数据类型为smallint

ALTERtablesALTERCOLUMNstatussmallint;

4删除(3题中取值范围的约束

ALTERtablesDROPCK_city;

5删除属性列status

ALTERtablesDROPCK_city;

如教材85页所示,建立student,sc,course等表,并插入若干数据,完成如下操作:

列出没有成绩的学生的学号和课程号

SELECTSno,CnoFROMscWHEREGradeISNULL;

列出2号课程成绩在70分到80分学生的学号

SELECTSnoFROMscWHEREGrade=2ANDGradebetween70AND80;

查询所有2005级的学生的姓名,性别和所在系

SELECTSname,Ssex,SdeptFROMstudentWHERESnoLIKE'2005%';

查询计科系2004级全体学生的所有信息

SELECT*FROMstudentWHERESdept='js'ANDSnoLIKE'2004%';

查询计科系2006级3班和4班学生的姓名和性别

SELECTSname,SsexFROMstudentWHERESdept='js'AND(SnoLIKE'2006_3%'ORSnoLIKE'2006_4%';

查询数学系所有学生的姓名,性别和出生年份|

SELECTSname,Ssex,2012-SageFROMstudentWHERESdept='math';

将course表中名为PASCAL语言的课程更名为“C语言”

UPDATECourseSETCname='C语言'WHERECname='PASCAL';

将所有课程的学分增加1分

UPDATECourseSETCcredit=Ccredit+1;

删除没有选课成绩的选课记录

DELETEFROMscWHEREGradeISNULL;

删除“IS”系的所有学生信息

DELETEFROMstudentWHERESdept='IS';

删除所有的课程信息

DELETEFROMCourse;

3.主要设备及软件

1PC

2MicrosoftSQLServer2005

实验四查询(多表查询,嵌套查询,分组查询

(验证型实验12学时

1.目的要求:

1实现单表和多表的普通查询和嵌套查询。

包括返回单值的子查询和返回多值的子查询。

使用5个聚合函数以及GROUPBY子句和HAVING子句实现分组查询.

2.实验内容

有如下关系模式,分析每个关系模式的主码,外码,完成后面的查询

职员表:

Emp(eid:

integer;ename:

string,salary:

real

部门表:

Dept(did:

integer,dname:

string,managerid:

integer,floornum:

integer

职员与部分的关系表:

Works(eid:

integer,did:

integer;

Works表表示:

一个职员可以在多个部门工作,一个部门有多个职员

Dept表中managerid可以取值null,表示尚未任命部门经理,floornum可以取值null,表示尚未分配工作地点

用单表查询完成如下操作:

1输出所有员工的姓名和工资

SELECTename,salaryFROMEmp;

2输出薪水少于10000或者大于100000的雇员的名字

SELECTenameFROMEmpWHEREsalary<10000orsalary>100000;

3输出所有姓“欧阳”,且全名为四个字的雇员的姓名和工资

SELECTename,salaryFROMEmpWHEREenameLIKE'欧阳__';

4输出薪水在20000和50000之间的雇员的名字

SELECTenameFROMEmpWHEREsalaryBETWEEN20000AND50000;

5输出部门名字中含有“_”的所有部门的名字和楼层号

SELECTdname,floornumFROMDeptWHEREdnameLIKE'%\_%'ESCAPE'\';

6查询公司的员工数

SELECTCOUNT(*FROMEmp;

7查询所有还没有部门经理的部门的名字和编号

SELECTdname,didFROMDeptWHEREmanageridisNULL;

8查询所有已分配楼层的部门的所有信息

SELECT*FROMDeptWHEREfloornumisNOTNULL;

用连接查询完成如下操作:

1查询“电视”部门的职工人数

SELECTCOUNT(didFROMWorksWHEREWorks.did=(SELECTdidFROMDeptWHEREdname='电视';

2输出每个部门的名字和平均工资

selectdname,avg(salaryfromemp,dept,workswhereemp.eid=works.eidanddept.did=works.didgroupbydname;

3查询每个部门的部门编号,及其拥有的雇员的人数

selectDept.did,Count(eidfromDept,WorksWHEREDept.did=Works.didGROUPBYDept.did;

4查询在第10层工作,同时薪水少于¥50000的所有雇员的名字

SELECTDISTINCTenameFROMEmp,Dept,WorksWHEREEmp.eid=Works.eidANDWorks.did=Dept.didANDDept.floornum=10ANDsalary>50000;

5输出同时管理三个或者更多部门的管理者的名字

selectenamefromdept,empwheredept.managerid=emp.eidgroupbymanagerid,enamehavingcount(did>=3;

6输出管理在同一层上10个以上部门的所有管理者的名字

SELECTenameFROMDept,EmpWHEREEmp.eid=Dept.manageridgroupbymanagerid,floornum,enamehavingCOUNT(did>10;

7输出雇员“刘丽”工作的部门的名字

SELECTdnameFROMEmp,Dept,WorksWHEREEmp.ename='刘丽'ANDEmp.eid=Works.eidANDWorks.did=Dept.did;

用嵌套查询完成如下操作:

1查询工资最高的雇员的名字

SELECTenameFROMEmpWHEREsalary=(SELECTMAX(salaryFROMEmp;

2查询工资最低的雇员的名字及其所在部门的编号和名字

SELECTename,Dept.did,dnameFROMEmp,Dept,WorksWHEREsalary=(SELECTMIN(salaryFROMEmpANDEmp.eid=Works.eidANDWorks.did=Dept.did;

3输出与Santa工作部门相同的所有雇员的所有信息

SELECTEmp.eid,ename,salaryFROMEmp,Dept,WorksWHEREEmp.eid=Works.eidANDWorks.did=Dept.didANDDept.didin(SELECTdidFROMWorksWHEREeid=(SELECTeidFROMEmpWHEREename='Santa';

4找出薪水在20000以上,并且在电视部门或者玩具部门工作的雇员的名字

SELECTDISTINCTenameFROMEmp,Dept,WorksWHEREEmp.eid=Works.eidANDWorks.did=Dept.didANDsalary>20000ANDdnamein(SELECTdnameFROMDeptWHEREdname='电视'ordname='玩具';

5输出与刘丽在同一层工作的雇员的名字

SELECTDISTINCTenameFROMEmp,Dept,WorksWHEREEmp.eid=Works.eidANDWorks.did=Dept.didANDfloornumin(SELECTDISTINCTfloornumFROMDept,Emp,WorksWHEREDept.did=Works.didANDWorks.eid=Emp.eidANDEmp.ename='刘丽';

6输出比所在部门的经理挣的还要多的雇员的名字

SELECTDISTINCTenameFROMEmp,Dept,WorksWHEREsalary>All(SELECTsalaryFROMEmp,DeptWHEREEmp.eid=Dept.manageridANDEmp.eid=Works.eidANDWorks.did=

Dept.didANDenamein(SELECTenameFROMEmp;

7输出满足如下条件的各个部门的名字:

经理的姓为张,同时他的薪水既不是

本部门最高也不是最低

SELECTDISTINCTdnameFROMWorks,Dept,empwhereDept.managerid=emp.eidandenamelike'张%'ANDsalary<(selectmax(salaryFROMempWHEREeidIN(SELECTeidFROMworks,DeptWHEREworks.did=Dept.didANDsalary>(SELECTmin(salaryfromempwhereeidin(selecteidfromworkswhereworks.did=dept.did;

8输出比“玩具”部门所有职工工资都高的雇员的姓名

SELECTenameFROMEmpWHEREsalary>(SELECTmax(salaryFROMEmp,Works,DeptWHEREEmp.eid=Works.eidANDWorks.did=Dept.didANDDept.dname='玩具';

9输出比“电视”部门职工平均工资高的雇员的姓名

SELECTenameFROMEmpWHEREsalary>(SELEcTAVG(salaryFROMEmp,Works,DeptWHEREEmp.eid=Works.eidANDWorks.did=Dept.didANDDept.dname='电视'GROUPBYDept.did;

10找出所有有职工的部门的名字和楼层号

SELECTdname,floornumFROMDeptWHEREdidin(SELECTDISTINCTdidFROMWorks;

11查询所有没有职工的部门编号和名字

SELECTdid,dnameFROMDeptWHEREdidnotin(SELECTDISTINCTdidFROMWorks;

12输出同时在玩具部门和糖果部门工作的雇员的名字和薪水

SELECTDISTINCTename,salaryFROMEmp,Works,DeptWHEREEmp.eid=Works.eidANDWorks.eidin(SELECTeidFROMWorks,DeptWHEREWorks.did=Dept.didANDDept.dname='玩具'ANDWorks.eidin(SELECTeidFROMWorks,DeptWHEREWorks.did=Dept.didANDDept.dname='糖果';

3.主要设备及软件

1PC

2MicrosoftSQLServer2005

实验五为表格建立约束,修改约束和查询约束

(验证型实验4学时

1.目的要求:

1使用ALTER语句和CREATE语句建立、修改、删除和查询约束

2.实验内容:

执行以下SQL语句,完成随后的操作,若有错误,分析错误原因并改正错误:

createtablestudent(snochar(9notnull,snamechar(10,ssexchar(2,sagetinyint,sdeptvarchar(40;

createtablecourse(cnochar(4notnull,cnamevarchar(30,cpnochar(4,credittinyintcreatetablesc(snochar(9,char(5,gradenumeric(3,1;

出错

第三句改为

createtablesc(snochar(9,cnochar(5,gradenumeric(3,1

1在student表中,使sdept只能取值“计算机科学学院”,“数软学院”,“电子工程学

院”,“化学与材料科学学院”

AltertablestudentaddconstraintCK_sdeptcheck(sdept='计算机科学学院'orsdept='数软学院'orsdept='电子工程学院'orsdept='化学

与材料科学学院';

2在student表中sage有默认值18

ALTERTABLEstudentADDDEFAULT('18'FORsage;

3为student表建立主键

ALTERTABLEstudentADDPRIMARYKEY(Sno;

4为course表建立主键和外键,其中外键约束名为C_FK_CPNO

ALTERTABLEcourseADDprimarykey(cno,C_FK_CPNOCHAR(4FOREIGNKEY(cpnoREFERENCEScourse(cno;

5为course表建立检查约束,限定credit的取值只能取3,2,4,5;

ALTERTABLEcourseADDCHECK(creditin('3','2','4','5';

6为course表建立唯一约束,确保每们课程名字唯一

ALTERTABLEcourseADDUNIQUE(cname;

7为sc表建立主键和外键,并给出相应的约束名

ALTERTABLEscADDconstraintPK_sno_cnoPRIMARYKEY(sno,cno,FK_snoCHAR(9FOREIGNKEY(snoREFERENCESstudent(sno,FK_cnoCHAR(4FOREIGNKEY(cno

REFERENCEScourse(cno;

8在course表中插入元组(1,数据库,5,4和(2,数学,null,2,若不能正确

插入,分析原因,给出解决办法

不能正确插入,因为数据类型不对,更改方案

INSERTINTOcourse(cno,cname,cpno,creditVALUES('1','数据库','5',4;

INSERTINTOCourse(cno,cname,cpno,creditVALU

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1