2022年山西农业大学数据库系统原理实验报告 .pdf
数据库原理实验报告题目:交互式 SQL语言 1班级:学号:姓名:日期:一、实验目的1. 了解 MSSQLServer2008 的工作环境和系统架构;2. 掌握数据库的交互式SQL工具,通过 SQL语言对数据库进行熟练操作;3. 完成课本数据库系统概论第三章习题的第三题。二、实验平台采用 MSSQLServer2008 为 RDBMS , 利用查询分析器作为交互查询工具对数据库进行操作。三、实验内容数据库管理系统的安装和启动,新建数据表、索引和视图,修改数据表,更新数据,备份数据库,删除数据库。四、实验步骤1. SQLServer2008 的启动开 始 所 有 程 序 Microsoft SQLServer 2008SQL Server ManagementStudio选择 windows 身份验证连接到服务器。2. 新建数据库 【请写出具体的 SQL语句】工具栏 “ 新建查询 ” 按钮打开查询分析器窗口使用 SQL语句新建数据库SPJcreatedatabasespj3. 定义基本表 【请写出具体的 SQL语句】创建供应商表S,属性包括: SNO(char, 主码),SNAME(char, 非空 ,唯一 ),STATUS(smallint) ,CITY(char) 。创建零件表 P, 属性包括:PNO(char, 主码), PNAME(char, 非空), STATUS(char),CITY(smallint) 。创建工程表J,属性包括:JNO(char, 主码 ), JNAME(char, 非空 ,唯一 ),CITY(char) 。创建供应关系表SPJ , 属性包括:SNO(char, 主码), PNO(char, 主码), JNO(char,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - 主码),QTY(int) ,且 SNO 、PNO、JNO分别是 S 、P、J表中 SNO 、PNO 、JNO的外码。createtables( snochar ( 20 )primarykey ,snamechar( 20 )notnullunique,statussmallint,citychar ( 20 );createtablep( pnochar ( 20 )primarykey ,pnamechar( 20 )notnull,statuschar( 20 ),citysmallint);createtablej( jnochar ( 20 )primarykey ,jnamechar( 20 )notnullunique,citychar ( 20 );createtablespj( snochar ( 20 ),pnochar( 20 ),jnochar( 20 ),qtyint,primarykey( sno , pno , jno ),foreignkey( sno )referencess ( sno ),foreignkey( pno )referencesp( pno ),foreignkey( jno )referencesj ( jno );4. 插入数据 【请写出具体的 SQL语句,写出前三行,剩余部分用省略号代替即可】插入 S表中的数据;插入 P表中的数据;插入 J表中的数据;插入 SPJ 表中的数据。INSERTINTOsVALUES( S1, 精益 , 20 , 天津 ),( S2, 盛锡 , 10 , 北京 ),( S3, 东方红 , 30 , 北京 ),( S4, 丰泰盛 , 20 , 天津 ),( S5, 为民 , 30 , 上海 )INSERT名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - INTOpVALUES( P1, 螺母 , 红 , 12 ),( P2, 螺栓 , 绿 , 17 ),( P3, 螺丝刀 , 蓝 , 14 ),( P4, 螺丝刀 , 红 , 14 ),( P5, 凸轮 , 蓝 , 40 ),( P6, 齿轮 , 红 , 30 )INSERTINTOjVALUES( J1, 三建 , 北京 ),( J2, 一汽 , 长春 ),( J3, 弹簧厂 , 天津 ),( J4, 造船厂 , 天津 ),( J5, 机车厂 , 唐山 ),( J6, 无线电厂 , 常州 ),( J7, 半导体厂 , 南京 )INSERTINTOspjVALUES( S1, P1, J1, 200 ),( S1, P1, J3, 100 ),( S1, P1, J4, 700 ),( S1, P2, J2, 100 ),( S2, P3, J1, 400 ),( S2, P3, J2, 200 ),( S2, P3, J4, 500 ),( S2, P3, J5, 400 ),( S2, P5, J1, 400 ),( S2, P5, J2, 100 ),( S3, P1, J1, 200 ),( S3, P3, J1, 200 ),( S4, P5, J1, 100 ),( S4, P6, J3, 300 ),( S4, P6, J4, 200 ),( S5, P2, J4, 100 ),( S5, P3, J1, 200 ),( S5, P6, J2, 200 ),( S5, P6, J4, 500 )5. 更新数据 【请写出具体的 SQL语句】(习题 8)把全部红色零件的颜色改为蓝色;updatepsetstatus= 蓝名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - wherestatus= 红(习题 9)由 S5供应给 J4的零件 P6改为由 S3供应;updatespjsetsno =s3wherejno =j4andpno =p6andsno=s5;(习题 10)删除供应商 S2的记录,并从供应关系中删除相应记录;deletefromspjwheresnoin( selectsnofromswheresno =s2)deletefromswheresno =s26. 新建索引和视图 【请写出具体的 SQL语句】在 SPJ 表上建立关于 SNO 、PNO 、JNO 升序的唯一索引 SPJ_INDEX;createuniqueindexspj_indexonspj ( sno , pno , jno )为三建工程项目建立一个供应情况的视图SPJ_VIEW ,包括 SNO 、PNO和QTY共 3 个属性。createviewspj_viewasselectsno, pno , qtyfromspj7. 备份数据库将数据库 SPJ 备份以便下次实验继续使用。8. 删除数据库对象 【请写出具体的 SQL语句】删除数据表 SPJ ;droptablespj删除索引 SPJ_INDEX;dropindexspj_index删除视图 SPJ_VIEW ;dropviewspj_view删除数据库 SPJ 。dropdatabasespj名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 9 页 - - - - - - - - - 数据库原理实验报告题目:交互式 SQL语言 2班级:学号:姓名:日期:一、实验目的4. 掌握数据库的交互式SQL工具,通过 SQL语言对数据库进行熟练操作;5. 完成课本数据库系统概论第三章习题的第四、第五、第十一题。二、实验平台采用 MSSQLServer2008 为 RDBMS , 利用查询分析器作为交互查询工具对数据库进行操作。三、实验内容数据库的还原,查询。四、实验步骤1. 还原数据库将上一次备份过的数据库还原,以便进行下一步操作。2. 简单查询(只涉及一个表) 【请写出具体的 SQL语句】习题 3-5-1 ; 找出所有供应商所在的城市和姓名selectsname , cityfroms习题 3-5-2 ;找出所有零件的名称、颜色、重量selectpname , status, cityfromp习题 3-5-3 ;找出使用 s1 所供应零件的工程号码selectjnofromspjwheresno =s1习题 2-5-1 ;求供应工程 j1 零件的供应商号码snoselectsnofromspjwherejno =ji习题 2-5-2 。求供应工程 j1 零件 p1 的供应商号码 sno名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 9 页 - - - - - - - - - selectsnofromspjwherejno =j1andpno =p13. 视图查询(在视图上进行查询) 【请写出具体的SQL语句】习题 3-11-1 ;找出三建工程项目使用的各种零件代码及其数量selectsno , qtyfromspj_view习题 3-11-2 。找出 s1 的供应情况select*fromspj_viewwheresno =s14. 复杂查询(涉及多个表,可用连接查询、嵌套查询、集合查询等多种方式实现) 【请写出具体的 SQL语句】习题 3-5-4 ; (提示:连接表P和 SPJ )找出工程项目j2 使用的各种零件名称及其数量selectpname , qtyfromspj , pwherep. pno =spj . pnoandspj . jno=j2习题 3-5-5 ;找出上海厂商供应的所有零件号码(提示:连接表 S和 SPJ )selectpnofromspj , swheres . sno =spj . snoands . city= 上海 习题 2-5-3 ;求供应工程 j1 零件为红色的供应商号码(提示:方法 1,连接查询,连接表 P和 SPJ ,并且工程号为J1,颜色为红;方法 2,嵌套查询,内层查询红色零件的编号,外层查询中再加入工程号为J1 的条件。 )方法1:selectsnofromspj , pwherespj . pno=p. pnoandjno =j1andstatus= 红 方法2:selectsnofromspjwherejno =j1andpnoin(selectpnofrompwherestatus= 红 )习题 3-5-6 ;找出使用上海产的零件的工程名称(提示:方法 1,连接查询,连接表 J、S 和 SPJ ;方法 2,用带 IN 谓词的嵌套查询)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 9 页 - - - - - - - - - 方法 1:selectjnamefromj , s , spjwherespj . sno =s. snoandj . jno =spj . jnoands . city= 上海 方法 2: selectjnamefromjwherejnoin(selectjnofromspjwheresnoin( selectsnofromswherecity= 上海 )习题 3-5-7 ;找出没有使用天津产的零件的工程号码(提示:方法 1:用带 NOTEXIST谓词的嵌套查询实现;方法2:用集合操作实现,前一个查询得到所有工程号码,后一个查询得到使用天津产的零件的工程号码,然后做EXCEPT运算即可。)方法1:selectdistinctjnofromjwherenotexists( select*froms, spjwheres . sno =spj . snoandj . jno =spj . jnoands . city= 天津 )方法 2:selectjnofromjexceptselectjnofroms, spjwheres . sno =spj . snoands . city= 天津 数据库原理实验报告题目:存储过程班级:学号:姓名:日期:一、实验目的掌握用存储过程对数据库对象进行增、删、改、查等逻辑操作。二、实验平台MSSQLServer2008 及其 PL/SQL引擎。三、实验内容名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 9 页 - - - - - - - - - 用存储过程对数据库对象进行各种逻辑操作。四、实验步骤1. 还原数据库还原学生 -选课数据库,以便进行下一步操作。2. 不带参数的存储过程编写存储过程,通过存储过程对数据库对象进行增、删、改、查操作。【这部分不需要写出具体代码,对课件中的示例进行练习即可】3. 带参数的存储过程 【请写出具体的 PL/SQL语句】编写一个带参数的存储过程,通过输入学号、 课程号、新的分数三个参数实现对选课表中学生成绩的修改,当输入的学号或课程号不存在时报错;createproceducescg( sno_schar ( 9), cno_schar ( 4), grade_ssmallint)asdeclaregrade_asmallint;beginselectgradeintograde_afromscwheresno =sno_sandcno =cno_s;ifgrade_aisnullthenrollback;return;endif;updatescsetgrade=grade_swheresno =sno_sandcno =cno_s ;commit;end ;编写一个带参数的存储过程,通过输入转入账户、 转出账户、转账金额三个参数实现转账功能,并可以进行“账户是否存在”和“余额是否足够”两项逻辑判断。CREATE PROCEDURE TRANSFER( inAccountINT ,outAccountINT ,amountFLOAT )AS DECLAREtotalDepositFLOAT ;BEGINSELECTtotalINTOtotalDepositFROM ACCOUNT WHERE ACCOUNTNUM =outAccount;IFtotalDepositISNULLTHENROLLBACK;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 9 页 - - - - - - - - - RETURN;END IF ;IFtotalDeposit amountTHENROLLBACK;RETURN;END IF ;UPDATE accountSET total=total- amountWHERE ACCOUNTNUM =outAccount;UPDATE accountSET total=total+ amountWHERE ACCOUNTNUM =inAccount;COMMIT;END;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 9 页 - - - - - - - - -