数据库中有 3 个关系,物资表 WZ(WZno, WZNAME, WZTYPE),其属性分别表示物资
号,物资名,物资类型。供应公司表 GYGS(Gno,GNAME,CITY,TEL,LXR),其属性分别表示
公司编号,公司名,公司所在城市,公司电话,公司联系人。供应表 GY(Gno,WZno, GYdate,
GYnum,GYprice),其属性分别表示公司编号,物资号,供应日期,供应数量,供应单价。
假设一种物资可由多个供应公司提供,1个供应公司可以提供多种物资。
1、为三张表插入相应数据。(要求 WZ 和 GYGS 分别至少 3 条记录,GY 表 8 条以上,
还需要考虑以下查询有结果)
2、查询供应了“A4 纸”的且供应数量大于 100 的供应公司编号及公司名,结果按公司
编号降序排列。
3、查询供应了所有物资的供应公司名。
4、查询至少供应了’2'号公司供应的全部物资的公司编号。
<tex>2^{\circ }</tex>
5、对三张表进行各种修改和删除数据操作(至少五种代码操作)。
1、建立三个表
CREATE TABLE WZ
(WZno CHAR(9) PRIMARY KEY,/*物资号*/
WZNAME CHAR(20) UNIQUE,
WZTYPE CHAR(20) NOT NULL
);
CREATE TABLE GYGS
(Gno CHAR(9) PRIMARY KEY,
GNAME CHAR(20) UNIQUE,
CITY CHAR(20) UNIQUE,
TEL CHAR(15) NOT NULL,
LXR CHAR(10)
);
CREATE TABLE GY
(Gno CHAR(9),
WZno CHAR(9),
GYdate DATE,*/
GYnum CHAR(5),
GYprice CHAR(5) NOT NULL,
PRIMARY KEY (Gno,WZno),/*主码*/
FOREIGN KEY (Gno) REFERENCES GYGS(Gno),/*表级完整性约束条件,Gno是外码,被参照表是GYGS*/
FOREIGN KEY (WZno) REFERENCES WZ(WZno)/*表级完整性约束条件,WZno是外码,被参照表是WZ*/
);
建立索引:
CREATE UNIQUE INDEX WZWZno ON WZ(WZno);
CREATE UNIQUE INDEX GSGno ON GYGS(Gno);
CREATE UNIQUE INDEX GYGno ON GY(Gno ASC,WZno ASC);
2、插入相应数据
insert into WZ values('01','A4纸','学习用具');
insert into WZ values('02','钢笔','学习用具');
insert into WZ values('03','文具盒','学习用具');
insert into WZ values('04','圆珠笔','学习用具');
insert into GYGS values('11','四川','橙光有限公司','123456789098789','张勇');
insert into GYGS values('12','重庆','光明有限公司','123345489098789','尔德');
insert into GYGS values('13','阿坝','子美有限公司','123456789098789','阿萨');
insert into GYGS values('14','南充','代数有限公司','123456789098789','沃达丰');
insert into GY values('01','11',NULL,'345','34567');
insert into GY values('01','13',NULL,'56','235');
insert into GY values('03','11',NULL,'126','3435');
insert into GY values('03','13',NULL,'676','27635');
insert into GY values('02','12',NULL,'456','7835');
insert into GY values('04','13',NULL,'355','2335');
insert into GY values('02','12',NULL,'3426','56535');
insert into GY values('04','12',NULL,'676','67855');
insert into GY values('01','14',NULL,'2343','3453');
insert into GY values('03','14',NULL,'789','235');
3、查询供应了“A4 纸”的且供应数量大于 100 的供应公司编号及公司名,结果按公司编号降序排列。
SELECT GYGS.Gno,GNAME
FROM WZ,GY,GYGS
WHERE WZ.WZNAME='A4纸'AND WZ.WZno=GY.WZno AND GY.GYnum > 100 AND GYGS.Gno=GY.Gno
ORDER BY Gno DESC;
以上结果没有按照降序排列
修改后
SELECT Gno,GYnum
FROM GY
WHERE GYnum > 100
ORDER BY Gno DESC;
4、查询供应了所有物资的供应公司名。
SELECT Gno
FROM GS
WHERE GYprice IS NOT NULL;
过滤重复
SELECT DISTINCT Gno FROM GY;
5、查询至少供应了’2'号公司供应的全部物资的公司编号。
6、<tex>2^{\circ }</tex>
select Gno
from GY
where Gno in
(
select Gno from GY where Gno<>'2' and GYnum in (select GYnum from GY where Gno='2')
)
7、对三张表进行各种修改和删除数据操作(至少五种代码操作)。
①、 INSERT INTO WZ ( WZno, WZNAME,WZTYPE )
VALUES( '05', '毛笔', '学习用具' );
加入一行数据
②、DELETE FROM GYGS WHERE GNAME= '01' ;
将编号为01的删除
③、 update WZ set WZNAME = '白纸' where WZno = 01;
将WZ表中的A4纸修改为白纸
④、delete from GY where Gno = 03;
删除GY表中,公司编号为03的所有数据
⑤、delete from WZ;
删除WZ表里面的所有数据