数据库实验报告很好的.docx
《数据库实验报告很好的.docx》由会员分享,可在线阅读,更多相关《数据库实验报告很好的.docx(32页珍藏版)》请在冰豆网上搜索。
![数据库实验报告很好的.docx](https://file1.bdocx.com/fileroot1/2023-1/23/3928d5ec-9772-46db-8b23-6d68fe2108cc/3928d5ec-9772-46db-8b23-6d68fe2108cc1.gif)
数据库实验报告很好的
《数据库系统概论》
实验报告书
专业班级
网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:
(组函数)求计