实验二 交互式SQL.docx
《实验二 交互式SQL.docx》由会员分享,可在线阅读,更多相关《实验二 交互式SQL.docx(13页珍藏版)》请在冰豆网上搜索。
![实验二 交互式SQL.docx](https://file1.bdocx.com/fileroot1/2022-11/16/98b52882-71f4-4309-a1f5-745901c250ff/98b52882-71f4-4309-a1f5-745901c250ff1.gif)
实验二交互式SQL
《数据库系统概论》实验报告
题目:
实验二交互式SQL
姓名
日期
2011/4/16
实验内容与完成情况:
一、数据定义
(一)用SQL语句建立第二章习题5中的4个表,进行表结构的修改和删除练习。
1、建立基本表
(1)创建“供应商”表S
CREATETABLES(
SNOCHAR(3),
SNAMECHAR(10),
STATUSCHAR
(2),
CITYCHAR(10));
(2)创建“零件”表P
CREATETABLEP(
PNOCHAR(3),
PNAMECHAR(10),
COLORCHAR(4),
WEIGHTINT);
(3)创建工程项表J
CREATETABLEJ(
JNOCHAR(3),
JNAMECHAR(10),
CITYCHAR(10));
(4)创建工程情况表SPJ
CREATETABLESPJ(
SNOCHAR(3),
PNOCHAR(3),
JNOCHAR(3),
QTYINT);
创建的四个表如下图所示:
2、修改基本表
(1)在P表中加入属性零件长度LENGTH(INT型)
ALTERTABLEPADDLENGTHINT;
(2)将P表中的属性WEIGHT类型改为SMALLINT型
ALTERTABLEPALTERCOLUMNWEIGHTSMALLINT;
(3)删除刚才在P表中加入的零件长度LENGTH属性
ALTERTABLEPDROPCOLUMNLENGTH;
3、删除基本表
(1)在所有操作结束后删除S表
DROPTABLES;
二、数据操作
1.插入数据。
1)向S表插入下列数据
2)向P表插入下列数据
3)向J表插入下列数据
4)向SPJ表插入下列数据
完成上述操作后得到四个表如下图所示
2.用SQL完成第二章习题5中的查询。
(1)查询供应工程J1零件的供应商号码SNO
SELECTDISTINCTSNO
FROMSPJ
WHEREJNO='J1';
查询结果为:
(2)查询供应工程J1零件P1的供应商号码SNO
SELECTDISTINCTSNO
FROMSPJ
WHEREJNO='J1'ANDPNO='P1';
查询结果为:
(3)查询供应工程J1零件为红色的供应商号码SNO
SELECTSNO
FROMSPJ,P
WHEREJNO='J1'
ANDSPJ.PNO=P.PNO
ANDCOLOR='红';
查询结果为:
(4)查询没有使用天津供应商生产的红色零件的工程号JNO
SELECTJNO
FROMJ
WHERENOTEXISTS
(SELECT*
FROMSPJ,S,P
WHERESPJ.JNO=J.JNO
ANDSPJ.SNO=S.SNO
ANDSPJ.PNO=P.PNO
ANDS.CITY='天津'
ANDP.COLOR='红');
查询结果为:
(5)查询至少用了供应商S1所供应的全部零件的工程号JNO
SELECTDISTINCTJNO
FROMSPJSPJZ
WHERENOTEXISTS
(SELECT*
FROMSPJSPJX
WHERESNO='S1'
ANDNOTEXISTS
(SELECT*
FROMSPJSPJY
WHERESPJY.PNO=SPJX.PNOANDSPJY.JNO=SPJZ.JNO));
查询结果为:
2.用SQL完成第三章习题5中的查询。
(1)找出所有供应商的姓名和所在城市。
SELECTSNAME,CITY
FROMS;
查询结果为:
(2)找出所有零件的名称、颜色、重量。
SELECTPNAME,COLOR,WEIGHT
FROMP;
查询结果为:
(3)找出使用供应商S1所供应零件的工程号码。
SELECTJNO
FROMSPJ
WHERESNO='S1';
查询结果为:
(4)找出工程项目J2使用的各种零件的名称及其数量。
SELECTP.PNAME,SPJ.QTY
FROMP,SPJ
WHEREP.PNO=SPJ.PNO
ANDSPJ.JNO='J2';
查询结果为:
(5)找出上海厂商供应的所有零件号码。
SELECTDISTINCTPNO
FROMSPJ
WHERESNOIN
(SELECTSNO
FROMS
WHERECITY='上海');
查询结果为:
(6)找出使用上海产的零件的工程名称。
SELECTJNAME
FROMJ
WHEREJNOIN
(SELECTJNO
FROMSPJ,S
WHERESPJ.SNO=S.SNO
ANDS.CITY='上海');
查询结果为:
(7)找出没有使用天津产的零件的工程号码。
SELECTJNO
FROMJ
WHERENOTEXISTS
(SELECT*
FROMSPJ
WHERESPJ.JNO=J.JNO
ANDSNOIN
(SELECTSNO
FROMS
WHERECITY='天津'));
查询结果为:
(8)把全部红色零件的颜色改成蓝色。
UPDATEP
SETCOLOR='蓝'
WHERECOLOR='红';
select*fromP;
结果为:
(9)由S5供给J4的零件P6改为由S3供应,请作必要修改。
UPDATESPJ
SETSNO='S3'
WHERESNO='S5'
ANDJNO='J4'
ANDPNO='P6';
select*fromSPJ;
结果为:
(10)从供应商关系中删除S2的记录,并从供应情况关系中删除相应的记录。
DELETE
FROMSPJ
WHERESNO='S2';
DELETE
FROMS
WHERESNO='S2';
SELECT*FROMS
SELECT*FROMSPJ;
结果为:
(11)请将(S2,J6,P4,200)插入供应情况关系。
INSERTINTOSPJVALUES('S2','J6','P4',200);
SELECT*FROMSPJ;
结果为:
出现的问题及解决方案:
1.在创建基本表时是否可以缺省主码?
答:
可以。
在定义基本表时可以定义主码也可以先不定义主码。
2.对基本表进行修改时,执行ALTERTABLEPDROPLENGTH显示失败
答:
执行上述语句后,显示不是约束条件,不能执行删除列的操作,应该在列LENGTH前加上限定条件COLUMN,即语句应为ALTERTABLEPDROPCOLUMNLENGTH。