《数据库实验(共13页).doc》由会员分享,可在线阅读,更多相关《数据库实验(共13页).doc(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上大连海事大学数据库原理课程实验报告(2016-2017学年第二学期)实验四 数据更新班 级: 智能科学与技术1班 学 号: 姓 名: 刘宇轩 指导教师: 谢兄 成 绩: 大连海事大学数据库原理课程实验大纲实验名称: 实验四 数据更新 实验学时: 2 适用专业: 智能科学与技术 实验环境: SQL.serve2008 执 笔 者: 刘宇轩 编写日期: 2017-5-29 1 实验目的(1) 掌握SQL数据更新语句的基本使用方法,如UPDATE、DELETE、INSERT。(2) 掌握更新语句条件中的嵌套查询使用方法。2 实验内容2.1 掌握SQL更新语句的基本使用方法(
2、1) INSERT基本语句。(2) UPDATE基本语句。(3) DELETE基本语句。2.2 掌握SQL更新语句的高级使用方法(1) INSERT批量插入语句。(2) UPDATE语句使用嵌套子查询。(3) DELETE语句使用嵌套子查询。3 实验要求(1) 深入复习教材第三章SQL有关更新语句。(2) 根据书上的例子,针对TPCH数据库模式设计各种更新语句,每种类型更新语句至少要设计一个,描述清楚数据更新要求,运行你所设计的更新语句,并截图相应的实验结果,每幅截图并要有较为详细的描述。也可以按照附1所列示例查询做实验。(3) 实验步骤和实验总结中要详细描述实验过程中出现的问题、原因和解决方
3、法。4 实验步骤4.1 掌握SQL更新语句的基本使用方法(1) INSERT基本语句(插入全部列的数据)。 插入一个新顾客的记录,要求每列都给一个合理的值插入一条订单明细记录,要求每列都给一个合理的值INSERT INTO CUSTOMER(CUSTKEY,NAME,ADDRESS,NATIONKEY,PHONE,ACCTBAL,MKTSEGMENT,COMMENT)VALUES(8,剑心,北海道,5,13.3,同心,无)原图插入后图(2) INSERT基本语句(插入部分列的数据,要求随机生成某些数字列或者字符列的数据)。插入一条订单记录,可以只给出必要的几个字段的值,其中数值字段可以用RAN
4、DOM函数随机生成数值INSERTINTO ORDERS(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% UPDATE PARTSET retailprice=retailprice*1.1原图更新图(4)
5、UPDATE基本语句(修改部分记录的某些列的值)。修改顾客张三的国籍UPDATE CUSTOMERSET NATIONKEY=2WHERE NAME=张三原图更新后图(5) DELETE基本语句(删除所有记录)。删除所有订单记录DELETE FROM lineitemWHERE orderkey IN(SELECT orderKEYFROM orders)DELETE FROM ORDERS(6) DELETE基本语句(删除部分记录)。删除2016年1月1日之前订单记录DELETE FROM lineitemWHERE orderkey IN(SELECT orderKEYFROM order
6、sWHEREORDERDATE2016-1-1)DELETE FROM ORDERSWHERE ORDERDATE2016-1-14.2 掌握SQL更新语句的高级使用方法(7) INSERT基本语句(插入全部列的数据)。 插入一个新顾客的记录,要求每列都给一个合理的值插入一条订单明细记录,要求每列都给一个合理的值INSERT INTO CUSTOMER(CUSTKEY,NAME,ADDRESS,NATIONKEY,PHONE,ACCTBAL,MKTSEGMENT,COMMENT)VALUES(8,剑心,北海道,5,13.3,同心,无)原图插入后图(8) INSERT基本语句(插入部分列的数据,
7、要求随机生成某些数字列或者字符列的数据)。插入一条订单记录,可以只给出必要的几个字段的值,其中数值字段可以用RANDOM函数随机生成数值INSERTINTO ORDERS(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基本语句(修改所有记录的某些列的值)。修改所有零件的零售价,使其价格
8、上浮10% UPDATE PARTSET retailprice=retailprice*1.1原图更新图(10) UPDATE基本语句(修改部分记录的某些列的值)。修改顾客张三的国籍UPDATE CUSTOMERSET NATIONKEY=2WHERE NAME=张三原图更新后图(11) DELETE基本语句(删除所有记录)。删除所有订单记录DELETE FROM lineitemWHERE orderkey IN(SELECT orderKEYFROM orders)DELETE FROM ORDERS(12) DELETE基本语句(删除部分记录)。删除2016年1月1日之前订单记录DEL
9、ETE FROM lineitemWHERE orderkey IN(SELECT orderKEYFROM ordersWHEREORDERDATE2016-1-1)DELETE FROM ORDERSWHERE ORDERDATE2016-1-1(13) INSERT批量插入语句(把一个查询结果插入到另外一个表中)。创建一个顾客购物统计表,记录每个顾客及其购物总数和总价等信息CREATE TABLE CUSTORDER( CUSTKEY INT, NAME VARCHAR(25), QUANTITY REAL,TOTALPRICE REAL)INSERT INTO CUSTORDER(CU
10、STKEY,NAME,QUANTITY,TOTALPRICE)SELECT C.CUSTKEY,C.NAME,L.QUANTITY,O.totalpriceFROM CUSTOMER C,ORDERS O,LINEITEM LWHERE C.CUSTKEY=O.CUSTKEY AND L.ORDERKEY=O.ORDERKEY (14) INSERT批量插入语句(使某个表的数据量倍增)。 把零件表的数据插入零件表中,多次重复执行,知道总记录数达到50万为止,记录下你执行了多少次?执行过程中你是如何保证实体完整性约束的INSERTINTO PART(PARTKEY,NAME,SIZE,RETAI
11、LPRICE)SELECT PARTKEY+(SELECT COUNT(*) FROM PART),NAME,SIZE,RETAILPRICE FROM PART每次把PART加原表元组数,保证完整性约束(15) UPDATE语句使用嵌套子查询(利用一个表中的数据来判断是否修改另外一个表中的数据)。修改顾客张三的订单明细记录中111号零件的折扣UPDATE LINEITEMSET DISCOUNT=0.90WHERE ORDERKEY IN(SELECT ORDERKEYFROM ORDERS O,CUSTOMER CWHERE O.CUSTKEY=C.CUSTKEY ANDC.NAME=张三
12、)原表如图更新之后张三的折扣为0.90(16) UPDATE语句使用嵌套子查询(利用一个表中的数据修改另外一个表中的数据)。利用LINEITEM表中的详细信息修改对应订单中的totalprice利用PARTSUPP 表中的供应价格来修改LINEITEM中的EXTENDEDPRICE,假设:UPDATE LINEITEM SET EXTENDEDPRICE= PS.SUPPLYCOST*lineitem.QUANTITY * LINEITEM.DISCOUNTFROM PARTSUPP PSWHERE PS.PARTKEY=lineitem.partkey AND PS.SUPPKEY=line
13、item.suppkey原图更新之后图UPDATE ORDERSSET ORDERS.TOTALPRICE=PS.SUPPLYCOST*QUANTITYFROM LINEITEM L,PARTSUPP PSWHERE L.ORDERKEY IN(SELECT L2.ORDERKEYFROM LINEITEM L2,ORDERS O,PARTSUPP PS2WHERE O.ORDERKEY=L2.ORDERKEY AND PS2.SUPPKEY=L2.partkey AND PS2.SUPPKEY=L2.suppkey)原图更新之后图(17) DELETE语句使用嵌套子查询(利用一个表中的数据来
14、判断是否删除另外一个表中的数据)。删除顾客张三的订单记录DELETE FROM lineitemWHERE orderkey IN(SELECT ORDERKEYFROM ORDERSWHERE ORDERKEY IN(SELECT ORDERKEYFROM CUSTOMER CWHERE C.NAME=张三 AND C.CUSTKEY=ORDERS.CUSTKEY)DELETE FROM ORDERSWHERE ORDERKEY IN(SELECT ORDERKEYFROM CUSTOMER CWHERE C.NAME=张三 AND C.CUSTKEY=ORDERS.CUSTKEY)原图更新
15、图5 总结与体会5.1 实验中出现的问题及其解决方案相对于上一次,这次实验难度比较大。首先出现的问题是因为没有复习,知识点大量遗忘,后经过复习终于想起来了这些知识点。另一个问题是不知道数据库怎么备份还原。在计算机科学与技术某葛优同学的帮助我找到了处理方法,解决了问题。还有就是批量插入数据那里。我不得不在网上查了很多资料,找到了处理这类问题的方法。使用RAND()函数也费了我很多时间。网上很多资料都是serve2003,而我用的是serve2008我专门找到了serve2008的使用教程,解决了问题。5.2 总结更新插入删除三种操作个有个的特点,INSERT可以使用嵌套插入,选择自己需要的数据插入,同时也可以批量插入。UPDATE同样可以嵌套插入。DELETE的使用要注意级联删除。5.3 体会这次实验的难度比较大,我也确实花很多时间,不过经过足够长时间的学习,我还是圆满的完成了这次任务。表的插入删除更新是SQL基本功能,学好了这些基本功能对未来的发展有很大的帮助。专心-专注-专业
限制150内