数据库实验报告很好的.docx

上传人:b****5 文档编号:7663678 上传时间:2023-01-25 格式:DOCX 页数:32 大小:31.52KB
下载 相关 举报
数据库实验报告很好的.docx_第1页
第1页 / 共32页
数据库实验报告很好的.docx_第2页
第2页 / 共32页
数据库实验报告很好的.docx_第3页
第3页 / 共32页
数据库实验报告很好的.docx_第4页
第4页 / 共32页
数据库实验报告很好的.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

数据库实验报告很好的.docx

《数据库实验报告很好的.docx》由会员分享,可在线阅读,更多相关《数据库实验报告很好的.docx(32页珍藏版)》请在冰豆网上搜索。

数据库实验报告很好的.docx

数据库实验报告很好的

 

《数据库系统概论》

实验报告书

 

专业班级

网082

学号

089074320

姓名

冯森森

指导教师

张学锋

 

安徽工业大学计算机学院

实验一:

数据定义/数据操纵语言

[实验日期]年月日

[实验目的]

熟悉SQLSERVER上机环境及SQLSERVER客户端的配置;熟练掌握和使用DDL语言,建立、修改和删除数据库表、主键、外键约束关系和索引;熟练掌握和使用DML语言,对数据进行增加、修改和删除操作。

[实验内容]

SQLSERVER上机环境以及SQLSERVER客户端的配置参见附录。

1.SQL数据定义语句:

例1-1:

(建立数据库表)建立教学数据库的四个数据库表,其中S表中不包含SSEX(C,2)字段,Sname字段为Sname(C,8)且可为空。

代码:

1.createtableS

(SNOchar(5)primarykey,SNAMEchar(8),SDEPTchar

(2),SCLASSchar

(2),SAGEint);

2.createtableC

(CNOchar(3)primarykey,CNAMEchar(16),CCREDITint);

3.createtableT

(TNAMECHAR(8),TSEXCHAR

(2),CNOCHAR(3),TDATECHAR(12),TDEPTCHAR

(2));

4.createtableSC

(SNOCHAR(5),CNOCHAR(3),SCOREINT,PRIMARYKEY(CNO,SNO),

FOREIGNKEY(SNO)REFERENCESS(SNO),

FOREIGNKEY(CNO)REFERENCESC(CNO));

例1-2:

(修改数据库表)在S表中增加SEX(C,2)字段。

代码:

ALTERTABLESADDSEXCHAR

(2);

错误经历:

在ADD后加了COLUMN,显示语法错误

例1-3:

(修改列名)将Student表中列名SEX修改为SSEX。

代码:

ALTERTABLESDROPCOLUMNSEX;

ALTERTABLESADDSSEXCHAR

(2);

例1-4:

(修改数据库表)将Student表中把Sname字段修改为Sname(C,10)且为非空。

代码:

ALTERTABLESALTERCOLUMNSNAMECHAR(10)NOTNULL;

例1-5:

(建立索引)为Score表按课程号升序、分数降序建立索引,索引名为SC_GRADE。

代码:

CREATEINDEXSC_GRADEONSC(CNO,SCOREdesc);

例1-6:

(删除索引)删除索引SC_GRADE。

代码:

DROPINDEXSC.SC_GRADE;

例1-7:

(建立数据库表)建立数据库表S1(SNO,SNAME,SD,SA),其字段类型定义与Student表中的相应字段(SNO,SNAME,SDEPT,SAGE)的数据类型定义相同。

代码:

CREATETABLES1(SNOchar(5)primarykey,SNAMEchar(10),SDEPTchar

(2),SAGEint);

例1-8:

(修改数据库表)删除成绩表Score的参照完整性约束关系。

代码:

ALTERTABLESCDROPCONSTRAINTFK__SC__SNO__1DF06171;

ALTERTABLESCDROPCONSTRAINTFK__SC__CNO__1EE485AA;

原因:

建表的时候没有给主键一个名字,系统就会自动起了上面的名字

例1-9:

(修改数据库表)添加成绩表SC的参照完整性约束关系。

代码:

ALTERTABLESCADDCONSTRAINTSC_F1FOREIGNKEY(SNO)REFERENCESS(SNO);

ALTERTABLESCADDCONSTRAINTSC_F2FOREIGNKEY(CNO)REFERENCESC(CNO);

例1-10:

(修改数据库表名)将数据库表S1改名为Student_Temp。

代码:

EXECSP_RENAME'S1','STUDENT_TEMP';

2.SQL数据操纵语句:

例2-1:

(插入数据)按前面各表中的数据分别插入到教学数据库的四个数据库表中。

代码:

BEGINTRANSACTION:

insertintoSvalues('96001','马小燕','CS','01',21,'女');

insertintoSvalues('96002','黎明','CS','01',18,'男');

insertintoSvalues('96003','刘东明','MA','01',18,'男');

insertintoSvalues('96004','赵志勇','IS','02',20,'男');

insertintoSvalues('97001','马蓉','MA','02',19,'女');

insertintoSvalues('97002','李成功','CS','01',20,'男');

insertintoSvalues('97003','黎明','IS','03',19,'女');

insertintoSvalues('97004','李丽','CS','02',19,'女');

insertintoSvalues('96005','司马志明','CS','02',18,'男');

createtableC(CNOchar(3)primarykey,CNAMEchar(16),CTIMEint);

insertintoCvalues('001','数学分析',144);

insertintoCvalues('002','普通物理',144);

insertintoCvalues('003','微机原理',80);

insertintoCvalues('004','数据结构',72);

insertintoCvalues('005','操作系统',80);

insertintoCvalues('006','数据库原理',80);

insertintoCvalues('007','编译原理',60);

insertintoCvalues('008','程序设计',40);

createtableT(TNAMECHAR(8),TSEXCHAR

(2),CNOCHAR(3),TDATECHAR(12),TDEPTCHAR

(2));

insertintoTvalues('王成刚','男','004','1999.9.5','CS');

insertintoTvalues('李正科','男','003','1999.9.5','CS');

insertintoTvalues('严敏','女','001','1999.9.5','MA');

insertintoTvalues('赵高','男','004','1999.9.5','MA');

insertintoTvalues('刘玉兰','女','006','2000.2.23','CS');

insertintoTvalues('王成刚','男','004','2000.2.23','IS');

insertintoTvalues('马悦','女','008','2000.9.6','CS');

createtableSC(snochar(5),cnochar(3),scoreint);

insertintoSCvalues('96001','001',77);

insertintoSCvalues('96001','003',89);

insertintoSCvalues('96001','004',86);

insertintoSCvalues('96001','005',82);

insertintoSCvalues('96002','001',88);

insertintoSCvalues('96002','003',92);

insertintoSCvalues('96002','006',90);

insertintoSCvalues('96005','004',92);

insertintoSCvalues('96005','005',90);

insertintoSCvalues('96005','006',89);

insertintoSCvalues('96005','007',76);

insertintoSCvalues('96003','001',69);

insertintoSCvalues('97001','001',96);

insertintoSCvalues('97001','008',95);

insertintoSCvalues('96004','001',87);

insertintoSCvalues('96003','003',91);

insertintoSCvalues('97002','003',91);

insertintoSCvalues('97002','004',NULL);

insertintoSCvalues('97002','006',92);

insertintoSCvalues('97004','005',90);

insertintoSCvalues('97004','006',85);

COMMIT;

例2-2:

(多行插入)将表Student表中计算机系(‘CS’)的学生数据插入到表S1中。

(以上操作中,注意用COMMIT提交数据,将数据保存到数据库服务器)

代码:

BEGINTRANSACTION:

INSERTINTOSTUDENT_TEMP(SNO,SNAME,SDEPT,SAGE)

(SELECTSNO,SNAME,SDEPT,SAGEFROMSWHERESDEPT='CS');

COMMIT;

例2-3:

(利用查询来实现表的定义与数据插入)求每一个学生的平均成绩,把结果存入数据库表Student_Gr中。

代码:

CREATETABLESTUDENT_GR(SNAMECHAR(10),AVERAGEINT);

INTERTINTOSTUDENT_GRSELECTS.SNO,AVG(SCORE)FROMS,SCWHERES.SNO=SC.SNOGROUPBYS.SNO;

例2-4:

(修改数据)将Student_Temp表中所有学生的年龄加2。

代码:

UPDATESTUDENT_TEMPSETSAGE=SAGE+2

例2-5:

(修改数据)将Course表中‘程序设计’课时数修改成与‘数据结构’的课时数相同。

代码:

UPDATECSETCTIME=(SELECTCTIMEFROMCWHERECNAME='数据结构')WHERECNAME='程序设计'

例2-6:

(插入数据)向Score表中插入数据(‘98001’,‘001’,95),根据返回信息解释其原因。

代码:

INSERTINTOSCVALUES('98001','001',95);

返回的错误信息:

INSERT语句与COLUMNFOREIGNKEY约束'SC_F1'冲突。

该冲突发生于数据库'master',表'S',column'SNO'。

语句已终止

原因:

插入的这个数据中有SNOFOREIGNKEYREFERENCESS.SNO项,这就表明所有SC的元组中的SNO必需要在S中存在,而在S中不存在SNO为98001的学生,因而插入的项与这个外键规则违背。

例2-7:

(插入数据)向Score表中插入数据(‘97001’,‘010’,80),根据返回信息解释其原因。

代码:

INSERTINTOSCVALUES('97001','001',80);

返回的错误信息:

违反了PRIMARYKEY约束'PK__SC__5BED93EA'。

不能在对象'SC'中插入重复键。

语句已终止

原因:

因为在成绩表SC中已经规定了(SNO,CNO)为该表的主键,这就表明不能有两个元组的主键是相同的,而在SC中已经存在了学号为97001,课程号为001的元组,因此不允许插入

例2-8:

(删除数据)删除Student表中学号为‘96001’的学生信息,根据返回信息解释其原因。

代码:

DELETEFROMSWHERES.SNO='96001';

错误提示:

DELETE语句与COLUMNREFERENCE约束'SC_F1'冲突。

该冲突发生于数据库'master',表'SC',column'SNO'。

语句已终止

原因:

因为S的SNO是SC的外键,在删除S的数据时如果SC有数据是以S中的数据为外键的话会导致SC中的数据在S中找不到对应的数据,这样就违背了外键的规则

例2-9:

(删除数据)删除Course表中课程号为‘003’的课程信息,根据返回信息解释其原因。

代码:

DELETEFROMCWHERECNO='003';

DELETE语句与COLUMNREFERENCE约束'SC_F2'冲突。

该冲突发生于数据库'master',表'SC',column'CNO'。

语句已终止

原因和上题类似

例2-10:

(删除数据)删除学生表Student_Temp中学号以96打头的学生信息。

代码:

BEGINTRANSACTION:

DELETEFROMSTUDENT_TEMPWHERESNOLIKE'96%';

ROLLBACK;

(此操作后,注意用ROLLBACK回退可能更新的数据)

例2-11:

(删除数据)删除数据库表Student_Temp中所有学生的数据。

代码:

DELETEFROMSTUDENT_TEMP;

例2-12:

(删除表)删除数据库表Student_Temp和Student_Gr。

代码:

DROPTABLESTUDENT_TEMP;

DROPVIEWSTUDENT_GR;

实验二:

数据查询语言

[实验日期]年月日

[实验目的]

体会SQL语言数据查询功能的丰富和复杂。

[实验内容]

3.SQL数据查询语句:

例3-1:

(选择表中的若干列)求全体学生的学号、姓名、性别和年龄。

代码:

SELECTSNO,SNAME,SSEX,SAGEFROMS;

结果如下:

96001马小燕女21

96002黎明男18

96003刘东明男18

96004赵志勇男20

96005司马志明男18

97001马蓉女19

97002李成功男20

97003黎明女19

97004李丽女19

例3-2:

(不选择重复行)求选修了课程的学生学号。

代码:

SELECTDISTINCTSNOFROMSCWHERECNOISNOTNULL;

结果如下:

96001

96002

96003

96004

96005

97001

97002

97004

例3-3:

(选择表中的所有列)求全体学生的详细信息。

代码:

SELECT*FROMS;

结果如下:

96001马小燕CS0121女83

96002黎明CS0118男87

96003刘东明MA0118男80

96004赵志勇IS0220男87

96005司马志明CS0218男86

97001马蓉MA0219女95

97002李成功CS0120男91

97003黎明IS0319女NULL

97004李丽CS0219女87

例3-4:

(使用表达式)求全体学生的学号、姓名和出生年份。

代码:

SELECTSNO,SNAME,2009-SAGEFROMS;

结果如下:

96001马小燕1988

96002黎明1991

96003刘东明1991

96004赵志勇1989

96005司马志明1991

97001马蓉1990

97002李成功1989

97003黎明1990

97004李丽1990

例3-5:

(使用列的别名)求学生的学号和出生年份,显示时使用别名“学号”和“出生年份”。

代码:

SELECTSNO,2009-SAGE出生年份FROMS;

960011988

960021991

960031991

960041989

960051991

970011990

970021989

970031990

970041990

例3-6:

(比较大小条件)求年龄大于19岁的学生的姓名和年龄。

代码:

SELECTSNAME,SAGEFROMSWHERESAGE>19;

结果如下:

马小燕21

赵志勇20

李成功20

例3-7:

(比较大小条件)求计算机系或信息系年龄大于18岁的学生的姓名、系和年龄。

代码:

SELECTSNAME,SDEPT,SAGEFROMSWHERESAGE>18ANDSDEPTIN('MA','CS');

结果如下:

马小燕CS21

马蓉MA19

李成功CS20

李丽CS19

例3-8:

(确定范围条件)求年龄在19岁与22岁(含20岁和22岁)之间的学生的学号和年龄。

代码:

SELECTSNO,SAGEFROMSWHERESAGE>19ANDSAGE<23;

结果如下:

9600121

9600420

9700220

例3-9:

(确定范围条件)求年龄不在19岁与22岁之间的学生的学号和年龄。

代码:

SELECTSNO,SAGEFROMSWHERESAGENOTBETWEEN19AND22;

结果如下:

9600218

9600318

9600518

例3-10:

(确定集合条件)求在下列各系的学生信息:

数学系、计算机系。

代码:

SELECT*FROMSWHERESDEPT='MA'ORSDEPT='CS';

结果如下:

96001马小燕CS0121女83

96002黎明CS0118男87

96003刘东明MA0118男80

96005司马志明CS0218男86

97001马蓉MA0219女95

97002李成功CS0120男91

97004李丽CS0219女87

例3-11:

(确定集合条件)求不是数学系、计算机系的学生信息。

代码:

SELECT*FROMSWHERESDEPTNOTIN('MA','CS');

结果如下:

96004赵志勇IS0220男87

97003黎明IS0319女NULL

例3-12:

(匹配查询)求姓名是以“李”打头的学生。

代码:

SELECT*FROMSWHERESNAMELIKE'李%';

结果如下:

97002李成功CS0120男91

97004李丽CS0219女87

例3-13:

(匹配查询)求姓名中含有“志”的学生。

代码:

SELECT*FROMSWHERESNAMELIKE'%志%';

结果如下:

96004赵志勇IS0220男87

96005司马志明CS0218男86

例3-14:

(匹配查询)求姓名长度至少是三个汉字且倒数第三个汉字必须是“马”的学生。

代码:

SELECT*FROMSWHERESNAMELIKE'%马____'ANDLEN(SNAME)>=3;

结果如下:

96001马小燕CS0121女83

96005司马志明CS0218男86

例3-15:

(匹配查询)求选修课程001或003,成绩在80至90之间,学号为96xxx的学生的学号、课程号和成绩。

代码:

SELECTS.SNO,C.CNO,SCOREFROMS,C,SCWHERES.SNO=SC.SNOANDC.CNO=SC.CNOANDS.SNOLIKE'96___'ANDSCOREIN(80,90);

结果如下:

9600500590

9600200690

例3-16:

(匹配查询)求课程名中包含’_’字符的课程号、课程名和学时数。

代码:

SELECTCNO,CNAME,CTIMEFROMCWHERECNAMELIKE'%\_%'ESCAPE'\';

结果为空

例3-17:

(涉及空值查询)求缺少学习成绩的学生的学号和课程号。

代码:

SELECTSNO,CNOFROMSCWHERESCOREISNULL;

结果如下:

97002004

例3-18:

(控制行的显示顺序)求选修003课程或004课程的学生的学号、课程号和分数,要求按课程号升序、分数降序的顺序显示结果。

代码:

SELECTSNO,CNO,SCOREFROMSCWHERECNOIN('003','004')ORDERBYCNO,SCOREDESC;

结果如下:

9600200392

9600300391

9700200391

9600100389

9600500492

9600200486

97002004NULL

例3-19:

(组函数)求学生总人数。

代码:

SELECTCOUNT(*)FROMS;

结果如下:

9

例3-20:

(组函数)求选修了课程的学生人数。

代码:

SELECTCOUNT(SNO)FROMSWHERESNOIN(SELECTDISTINCTSNOFROMSCWHERESCOREISNOTNULL);

结果如下:

8

例3-21:

(组函数)求计

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

当前位置:首页 > 农林牧渔 > 林学

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

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