大连海事大学数据库原理课程实验报告(2016-2017学年第二学期)实验四数据更新班级:智能科学与技术1班学号:2220152937姓名:刘宇轩指导教师:谢兄成绩:大连海事大学数据库原理课程实验大纲实验名称:实验四数据更新实验学时:2适用专业:智能科学与技术实验环境:SQL.serve2008执笔者:刘宇轩编写日期:2017-5-291实验目的(1)掌握SQL数据更新语句的基本使用方法,如UPDATE、DELETE、INSERT。(2)掌握更新语句条件中的嵌套查询使用方法。2实验内容2.1掌握SQL更新语句的基本使用方法(1)INSERT基本语句。(2)UPDATE基本语句。(3)DELETE基本语句。2.2掌握SQL更新语句的高级使用方法(1)INSERT批量插入语句。(2)UPDATE语句使用嵌套子查询。(3)DELETE语句使用嵌套子查询。3实验要求(1)深入复习教材第三章SQL有关更新语句。(2)根据书上的例子,针对TPCH数据库模式设计各种更新语句,每种类型更新语句至少要设计一个,描述清楚数据更新要求,运行你所设计的更新语句,并截图相应的实验结果,每幅截图并要有较为详细的描述。也可以按照附1所列示例查询做实验。(3)实验步骤和实验总结中要详细描述实验过程中出现的问题、原因和解决方法。4实验步骤4.1掌握SQL更新语句的基本使用方法(1)INSERT基本语句(插入全部列的数据)。插入一个新顾客的记录,要求每列都给一个合理的值插入一条订单明细记录,要求每列都给一个合理的值INSERTINTOCUSTOMER(CUSTKEY,NAME,ADDRESS,NATIONKEY,PHONE,ACCTBAL,MKTSEGMENT,COMMENT)VALUES(8,'剑心','北海道',5,594579,13.3,'同心','无')原图插入后图(2)INSERT基本语句(插入部分列的数据,要求随机生成某些数字列或者字符列的数据)。插入一条订单记录,可以只给出必要的几个字段的值,其中数值字段可以用RANDOM函数随机生成数值INSERTINTOORDERS(ORDERKEY,CUSTKEY,ORDERSTATUS,TOTALPRICE,ORDERDATE,ORDERPRIORITY,CLERK,SHIPPRIORITY,COMMENT)VALUES(8,3,RAND()*10,10000,'2015-4-4',RAND()*1000,RAND()*1000,RAND()*1000,'无')原图更新图(3)UPDATE基本语句(修改所有记录的某些列的值)。修改所有零件的零售价,使其价格上浮10%UPDATEPARTSETretailprice=retailprice*1.1原图更新图(4)UPDATE基本语句(修改部分记录的某些列的值)。修改顾客张三的国籍UPDATECUSTOMERSETNATIONKEY=2WHERENAME='张三'原图更新后图(5)DELETE基本语句(删除所有记录)。删除所有订单记录DELETEFROMlineitemWHEREorderkeyIN(SELECTorderKEYFROMorders)DELETEFROMORDERS(6)DELETE基本语句(删除部分记录)。删除2016年1月1日之前订单记录DELETEFROMlineitemWHEREorderkeyIN(SELECTorderKEYFROMordersWHEREORDERDATE'2016-1-1')DELETEFROMORDERSWHEREORDERDATE'2016-1-1'4.2掌握SQL更新语句的高级使用方法(7)INSERT基本语句(插入全部列的数据)。插入一个新顾客的记录,要求每列都给一个合理的值插入一条订单明细记录,要求每列都给一个合理的值INSERTINTOCUSTOMER(CUSTKEY,NAME,ADDRESS,NATIONKEY,PHONE,ACCTBAL,MKTSEGMENT,COMMENT)VALUES(8,'剑心','北海道',5,594579,13.3,'同心','无')原图插入后图(8)INSERT基本语句(插入部分列的数据,要求随机生成某些数字列或者字符列的数据)。插入一条订单记录,可以只给出必要的几个字段的值,其中数值字段可以用RANDOM函数随机生成数值INSERTINTOORDERS(ORDERKEY,CUSTKEY,ORDERSTATUS,TOTALPRICE,ORDERDATE,ORDERPRIORITY,CLERK,SHIPPRIORITY,COMMENT)VALUES(8,3,RAND()*10,10000,'2015-4-4',RAND()*1000,RAND()*1000,RAND()*1000,'无')原图更新图(9)UPDATE基本语句(修改所有记录的某些列的值)。修改所有零件的零售价,使其价格上浮10%UPDATEPARTSETretailprice=retailprice*1.1原图更新图(10)UPDATE基本语句(修改部分记录的某些列的值)。修改顾客张三的国籍UPDATECUSTOMERSETNATIONKEY=2WHERENAME='张三'原图更新后图(11)DELETE基本语句(删除所有记录)。删除所有订单记录DELETEFROMlineitemWHEREorderkeyIN(SELECTorderKEYFROMorders)DELETEFROMORDERS(12)DELETE基本语句(删除部分记录)。删除2016年1月1日之前订单记录DELETEFROMlineitemWHEREorderkeyIN(SELECTorderKEYFROMordersWHEREORDERDATE'2016-1-1')DELETEFROMORDERSWHEREORDERDATE'2016-1-1'(13)INSERT批量插入语句(把一个查询结果插入到另外一个表中)。创建一个顾客购物统计表,记录每个顾客及其购物总数和总价等信息CREATETABLECUSTORDER(CUSTKEYINT,NAMEVARCHAR(25),QUANTITYREAL,TOTALPRICEREAL)INSERTINTOCUSTORDER(CUSTKEY,NAME,QUANTITY,TOTALPRICE)SELECTC.CUSTKEY,C.NAME,L.QUANTITY,O.totalpriceFROMCUSTOMERC,ORDERSO,LINEITEMLWHEREC.CUSTKEY=O.CUSTKEYANDL.ORDERKEY=O.ORDERKEY(14)INSERT批量插入语句(使某个表的数据量倍增)。把零件表的数据插入零件表中,多次重复执行,知道总记录数达到50万为止,记录下你执行了多少次?执行过程中你是如何保证实体完整性约束的INSERTINTOPART(PARTKEY,NAME,SIZE,RETAILPRICE)SELECTPARTKEY+(SELECTCOUNT(*)FROMPART),NAME,SIZE,RETAILPRICEFROMPART每次把PART加原表元组数,保证完整性约束(15)UPDATE语句使用嵌套子查询(利用一个表中的数据来判断是否修改另外一个表中的数据)。修改顾客张三的订单明细记录中111号零件的折扣UPDATELINEITEMSETDISCOUNT=0.90WHEREORDERKEYIN(SELECTORDERKEYFROMORDERSO,CUSTOMERCWHEREO.CUSTKEY=C.CUSTKEYANDC.NAME='张三')原表如图更新之后张三的折扣为0.90(16)UPDATE语句使用嵌套子查询(利用一个表中的数据修改另外一个表中的数据)。利用LINEITEM表中的详细信息修改对应订单中的totalprice利用PARTSUPP表中的供应价格来修改LINEITEM中的EXTENDEDPRICE,假设:UPDATELINEITEMSETEXTENDEDPRICE=PS.SUPPLYCOST*lineitem.QUANTITY*LINEITEM.DISCOUNTFROMPARTSUPPPSWHEREPS.PARTKEY=lineitem.partkeyANDPS.SUPPKEY=lineitem.suppkey原图更新之后图UPDATEORDERSSETORDERS.TOTALPRICE=PS.SUPPLYCOST*QUANTITYFROMLINEITEML,PARTSUPPPSWHEREL.ORDERKEYIN(SELECTL2.ORDERKEYFROMLINEITEML2,ORDERSO,PARTSUPPPS2WHEREO.ORDERKEY=L2.ORDERKEYANDPS2.SUPPKEY=L2.partkeyANDPS2.SUPPKEY=L2.suppkey)原图更新之后图(17)DELETE语句使用嵌套子查询(利用一个表中的数据来判断是否删除另外一个表中的数据)。删除顾客张三的订单记录DELETEFROMlineitemWHEREorderkeyIN(SELECTORDERKEYFROMORDERSWHEREORDERKEYIN(SELECTORDERKEYFROMCUSTOMERCWHEREC.NAME='张三'ANDC.CUSTKEY=ORDERS.CUSTKEY))DELETEFROMORDERSWHEREORDERKEYIN(SELECTORDERKEYFROMCUSTOMERCWHEREC.NAME='张三'ANDC.CUSTKEY=ORDERS.CUSTKEY)原图更新图5总结与体会5.1实验中出现的问题及其解决方案相对于上一次,这次实验难度比较大。首先出现的问题是因为没有复习,知识点大量遗忘,后经过复习终于想起来了这些知识点。另一个问题是不知道数据库怎么备份还原。在计算机科学与技术某葛优同学的帮助我找到了处理方法,解决了问题。还有就是批量插入数据那里。我不得不在网上查了很多资料,找到了处理这类问题的方法。使用RAND()函数也费了我很多时间。网上很多资料都是serve2003,而我用的是serve2008我专门找到了serve2008的使用教程,解决了问题。5.2总结更新插入删除三种操作个有个的特点,INSERT可以使用嵌套插入,选择自己需要的数据插入,同时也可以批量插入。UPDATE同样可以嵌套插入。DELETE的使用要注意级联删除。5.3体会这次实验的难度比较大,我也确实花很多时间,不过经过足够长时间的学习,我还是圆满的完成了这次任务。表的插入删除更新是SQL基本功能,学好了这些基本功能对未来的发展有很大的帮助。