SQL语句实验报告.docx
《SQL语句实验报告.docx》由会员分享,可在线阅读,更多相关《SQL语句实验报告.docx(32页珍藏版)》请在冰豆网上搜索。
SQL语句实验报告
试验一:
数据定义及更新语句练习
一、试验目
熟练掌握用SQL语句实现数据库和基础表创建以及数据更新。
二、试验内容
(1)用SQL语句建立以下以自己名字为名数据库,包含S,P,J,和SPJ四个基础表(教材第二章习题5中四个表),要求实现关系三类完整性。
S(SNO,SNAME,STATUS,CITY);
P(PNO,PNAME,COLOR,WEIGHT);
J(JNO,JNAME,CITY);
SPJ(SNO,PNO,JNO,QTY);
(2)分别使用插入、删除、修改方法更新基础表中数据。
a.利用Insert语句将习题中给出示例统计插入各表。
b.利用Update更新表中统计:
①将p表中全部红色零件重量增加5。
②将spj表中全部天津供给商QTY属性值降低10。
用子查询。
c.利用Delete语句删除p表中全部红色零件统计。
三、完成情况
1.创建四个基础表:
CREATETABLES
(SNOCHAR(20)PRIMARYKEY,
SNAMECHAR(20),
STATUSINT,
CITYCHAR(20));
CREATETABLEP
(PNOCHAR(20)PRIMARYKEY,
PNAMECHAR(20),
COLORCHAR(10),
WEIGHTINT);
CREATETABLEJ
(JNOCHAR(20)PRIMARYKEY,
JNAMECHAR(20),
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));
2.利用INSERT语句为四个基础表插入数据(每个表插入操作均只以两个数据插入为例,其它省略):
INSERT
INTOS
VALUES('S1','精益','20','天津');
INSERT
INTOS
VALUES('S2','盛锡','10','北京');
INSERT
INTOP
VALUES('P1','螺母','红','12');
INSERT
INTOP
VALUES('P2','螺栓','绿','17');
INSERT
INTOJ
VALUES('J1','三建','北京');
INSERT
INTOJ
VALUES('J2','一汽','长春');
INSERT
INTOSPJ
VALUES('S1','P1','J1','200');
INSERT
INTOSPJ
VALUES('S1','P1','J3','100');
3.利用UPDATE语句更新表中统计:
UPDATEP
SETWEIGHT=WEIGHT+5
WHERECOLOR='红';
UPDATESPJ
SETQTY=QTY-10
WHERESNOIN
(SELECTSNO
FROMS
WHERECITY='天津');
4.利用Delete语句删除p表中全部红色零件统计
DELETE
FROMSPJ
WHEREPNOIN
(SELECTPNO
FROMP
WHERECOLOR='红');
DELETE
FROMP
WHERECOLOR='红';
四、试验结果
1.利用INSERT语句为四个基础表插入数据:
2.利用UPDATE语句更新表中统计:
3.利用Delete语句删除p表中全部红色零件统计
五、问题与处理
1.怎样保留数据库?
原认为需要用一次输入一次,以后经过老师讲解知道能够分离数据库(只保留.mdf文件就行了,到用时在附加数据库),还能够备份数据库。
2.为基础表P插入数据犯错。
在定义基础表P时,为PNAME列定义了UNIQUE约束条件,但插入数据时发觉PNAME有两个相同数据,造成不能正确插入数据。
经老师提醒后,选择利用DROP语句删除SPJ表和P表,进行修改重新定义,再次插入数据时便可顺利插入。
3.用Delete语句删除p表中全部红色零件统计时,直接在P表中进行对应操作,造成出现:
“DELETE 语句与REFERENCE 约束"FK__spj__pno__4F7CD00D"冲突。
该冲突发生于数据库"myspj",表"dbo.spj", column 'pno'。
语句已终止”情况。
经老师提醒后,发觉p.pno作为spj.pno外码,两张表相关系,需先在SPJ表中进行删除操作,然后才能在P表中进行删除操作,这么方可顺利完成p表中全部红色零件统计删除操作。
六、思索题
(1)在为各表设定关键字时弹出页面中相关键字和索引选项,试经过给基础表设定这两个项目并说明二者区分。
答:
关键字会受主码影响,而索引不受主码影响,能够为任何属性设索引。
索引能够加紧表查询速度,常常将用来查询一个或者多个字段设置为索引。
(2)基础表中输入数据时,注意数据与字段类型和长度以及能否为空属性是否一致,保留时如有错误分析错误原因,立刻更正并将错误汇报写在试验汇报中。
答:
在基础表中插入数据时,不为空地方不可输入空值,不然将无法继续插入。
七、试验总结
试验刚开始时,因为之前没有接触过SQLServer软件,造成有点不知所措,更不知从何下手,在老师指导和同学们帮助下,逐步学会了怎样进行试验操作。
感觉数据库还是比很好学(相对编程来说),不过建数据库时候轻易犯错,工作比较繁琐,建表时更要考虑周全并仔细检验,稍不小心,就可能造成前功尽弃,造成进行重新建表、插入数据等一系列操作。
试验二:
简单查询和连接查询
一、试验目
熟练掌握用SQL语句实现简单查询和多个数据表连接查询。
二、试验内容
(一)完成下面简单查询:
①查询全部“天津”供给商明细;
②查询全部“红色”14千克以上零件。
③查询工程名称中含有“厂”字工程明细。
(二)完成下面连接查询:
①等值连接:
求s表和j表相同城市等值连接。
②自然连接:
查询全部供给明细,要求显示供给商、零件和工程名称,
并根据供给、工程、零件排序。
③笛卡尔积:
求s和p表笛卡尔积。
④左连接:
求j表和spj表左连接。
⑤右连接:
求spj表和j表右连接。
三、完成情况
(一)简单查询
①查询全部“天津”供给商明细
SELECT*
FROMS
WHERECITY='天津';
②查询全部“红色”14千克以上零件
SELECT*
FROMP
WHERECOLOR='红'ANDWEIGHT>='14';
③查询工程名称中含有“厂”字工程明细
SELECT*
FROMJ
WHEREJNAMELIKE'%厂';
(二)连接查询
①等值连接
SELECTS.*,J.*
FROMS,J
WHERES.CITY=J.CITY;
②自然连接
SELECTSNAME,JNAME,PNAME,QTY
FROMS,P,J,SPJ
WHERES.SNO=SPJ.SNOAND
P.PNO=SPJ.PNOAND
J.JNO=SPJ.JNO;
③笛卡尔积
SELECT*
FROMS,P;
④左连接
SELECT*
FROMJLEFTOUTERJOINSPJON(J.JNO=SPJ.JNO);
⑤右连接
SELECT*
FROMSPJRIGHTOUTERJOINJON(SPJ.JNO=J.JNO);
四、试验结果
(一)简单查询
①查询全部“天津”供给商明细②查询全部“红色”14千克以上零件
③查询工程名中含“厂”字工程明细
(二)连接查询①等值连接
②自然连接
③笛卡尔积
④左连接⑤右连接
五、问题与处理
1.因为试验一对表中数据有所更改,进行试验二时不得不对试验数据再
次进行更改,添加和删除。
处理:
对有影响数据进行更改,而没有影响数据不做改变。
2.对多个表进行连接时,数据有时会被打乱。
处理:
对每一个数据名称前都加上所在表前缀,方便于区分数据。
3.对于存在量词和全称量词无法正确把握,不能得出正确查询结果。
处理:
对书中数据查询进行逐句逐字了解,以正确把握存在量词和全称量词利用。
4.在做自然连接时,查询出来结果有一百多行。
处理措施:
仔细检验以后发觉,少了一个连接Select SPJ.PNO=P.PNO。
六、思索题
查看试验内容2中左连接和右连接实施结果是否一致,为何?
答:
不一致,左连接是输出第一个表全部,二右连接是输出第二个表全部。
原因:
左连接列出左边关系中全部元组,右连接列出右边关系中全部元组。
七、试验总结
经过此次试验,我发觉自己对书本上知识点了解还不够透彻,前面所学知识也忘了不少,做试验时几乎都是翻着书本做出来。
如求s和p表笛卡尔积时,就感觉有点陌生了,不知道从哪着手,本认为会很麻烦,问询同学后才发觉简单“SELECT*FROMS,P;”语句就能够处理,由此可见自己对知识点了解还不够到位。
试验三:
分组查询和嵌套查询
一、试验目
熟练掌握用SQL语句实现多个数据表分组查询和嵌套查询。
二、试验内容
(一)分组查询:
1、求多种颜色零件平均重量。
2、求北京供给商和天津供给商总个数。
3、求各供给商供给零件总数。
4、求各供给商供给给各工程零件总数。
5、求使用了100个以上P1零件工程名称。
6、求各工程使用各城市供给零件总数。
(二)嵌套查询:
1、in连接谓词查询:
①查询没有使用天津供给商供给红色零件工程名称。
②查询供给了1000个以上零件供给商名称。
(having)
2、比较运算符:
求重量大于全部零件平均重量零件名称。
3、Exists连接谓词:
①查询供给J1全部零件都是红色供给商名称。
②最少用了供给商S1所供给全部零件工程号JNO。
三、完成情况
(一)分组查询
1.求多种颜色零件平均重量
SELECTCOLOR,AVG(WEIGHT)
FROMP
GROUPBYCOLOR;
2.求北京供给商和天津供给商总个数
SELECTCITY,COUNT(CITY)
FROMS
GROUPBYCITY
HAVINGCITY='北京'ORCITY='天津';
3.求各供给商供给零件总数
SELECTSPJ.SNO,SUM(QTY)
FROMSPJ
GROUPBYSPJ.SNO;
4.求各供给商供给给各工程零件总数
SELECTSPJ.SNO,JNO,SUM(QTY)
FROMSPJ
GROUPBYSPJ.SNO,JNO;
5.求使用了100个以上P1零件工程名称
SELECTJNAME
FROMSPJ,J
WHEREJ.JNO=SPJ.JNOANDPNO='P1'
GROUPBYJNAME,QTY
HAVINGQTY