1、如有你有帮助,请购买下载,谢谢! 1 页 数据库过程测试 1、 以下图的数据库为例,用SQL 完成以下检索:(3 分 / 题) 仓库职工 订购单 供应商 1)检索在北京的供应商的名称。 SELECT * FROM供应商WHERE地址= 北京 2)检索发给供应商S6 的订购单号。 SELECT订购单号FROM订购单WHERE供应商号 = S6 3)检索出职工E6 发给供应商S6 的订购单信息。 SELECT * FROM订购单WHERE供应商号 = S6 AND职工号 = E6 4)检索出向供应商S3 发过订购单的职工的职工号和仓库号。 SELECT职工号 ,仓库号FROM职工WHERE职工号I
2、N ( SELECT职工号FROM订购单WHERE供应商号 = S3 ) 5)检索出目前与S3 供应商没有联系的职工信息。 SELECT * FROM职工WHERE职工号NOT IN ( SELECT职工号FROM订购单WHERE供应商号 = S3 ) 6)检索出目前没有任何订购单的供应商信息。 SELECT * FROM供应商WHERE NOT EXISTS ( SELECT * FROM订购单WHERE供应商号 =供应商 .供应商号) 7)检索出和职工E1、 E3 都有联系的北京的供应商信息。 SELECT * FROM供应商WHERE供应商号IN ( SELECT供应商号FROM订购单W
3、HERE职工号 = E1 ) AND供应商号IN ( SELECT供应商号FROM订购单WHERE职工号 = E3 ) 8)检索出目前和华通电子公司有业务联系的每个职工的工资。 SELECT职工号 ,工资FROM职工WHERE职工号IN (SELECT职工号FROM订购单WHERE供应商号IN (SELECT供应商号FROM供应商WHERE供应商名 = 华通电子公司 ) 9)检索出与工资在1220 元以下的职工没有联系的供应商的名称。 SELECT供应商名FROM供应商WHERE供应商号IN (SELECT供应商号FROM订购单WHERE职工号NOT IN (SELECT职工号FROM 职工W
4、HERE工资1230) AND供应商号IN (SELECT供应商号FROM供应商WHERE地址 = 北京 ) 14)检索出仓库的个数。 SELECT COUNT(*) FROM仓库 15)检索出有最大面积的仓库信息。 SELECT * FROM仓库WHERE面积 =(SELECT MAX( 面积 ) FROM仓库 ) 16)检索出所有仓库的平均面积。 SELECT A VG( 面积 ) FROM 仓库 17)检索出向 S4 供应商发出订购单的那些仓库的平均面积。 SELECT AVG( 面积 ) FROM仓库WHERE仓库号IN (SELECT仓库号FROM职工WHERE职工号IN (SELE
5、CT职工号FROM 订购单WHERE供应商号 = S4 ) 18)检索出每个仓库中工资多于1220 元的职工个数。 SELECT仓库号 ,COUNT(*) FROM职工WHERE工资 1220 GROUP BY仓库号 19)检索出和面积最小的仓库有联系的供应商的个数。 SELECT COUNT(*) FROM供应商WHERE 供应商号IN (SELECT供应商号FROM订购单WHERE职工号IN (SELECT职工号FROM 职工WHERE仓库号IN (SELECT仓库号FROM仓库WHERE面积 = (SELECT MIN( 面积 ) FROM仓库 ) 20)检索出工资低于本仓库平均工资的职
6、工信息。 SELECT * FROM职工out WHERE工资 (SELECT AVG( 工资 ) FROM职工 inne WHERE仓库号 =out.仓库号 ) 2.以上图的数据库为例,用SQL 语句完成以下更新操作,并讨论数据完整性约束对这些操作的影 响:(4 分/ 题) 1)插入一个新的订购单元组,其中职工号为E6,订购单号为OR99,其他列为空。 INSERT INTO订购单 (职工号 , 订购单号 ) VALUES( E6 , OR99 ) 2)删除目前没有任何订购单的供应商。 DELETE FROM供应商WHERE供应商号NOT IN (SELECT供应商号FROM订购单WHERE
7、供应商号IS NOT NULL) 3)删除由在上海仓库工作的职工发出的所有订购单。 DELETE FROM订购单WHERE职工号IN (SELECT职工号FROM职工WHERE仓库号IN (SELECT仓库号FROM 仓库WHERE城市 = 上海 ) 4)北京的所有仓库增加100m 2 的面积。 UPDATE 仓库SET 面积 =面积 +100 WHERE城市 = 北京 5)给低于所有职工平均工资的职工提高5%的工资。 UPDA TE 职工 SET 工资 =工资 *1.05 WHERE工资 salary and 仓库号IN (SELECT仓库号FROM仓库WHERE城市 =city ) EXE
8、CUTE getemp salary =8000, city= 北京 4.在第 1 题的数据库中建立一个触发器,当删除仓库记录时同时删除该仓库的职工信息。(5 分) CREATE TRIGGER wdel_tri ON 仓库FOR DELETE AS DELETE职工WHERE仓库号IN (select 仓库号from DELETED); 5.在第 1 题的数据库中建立一个触发器,当插入一个职工记录时,检查该职工所在的仓库是否存在, 若不存在则撤消所做的插入操作。(5 分) CREATE TRIGGER empinsert_tri ON 职工FOR INSERT AS IF NOT EXISTS(SELECT * FROM仓库 WHERE仓库号IN (SELECT仓库号FROM INSERTED) BEGIN PRINT 非法仓库号 ; ROLLBACK TRANSACTION; END;