问答题
. 阅读下列说明,回答问题1至问题5。 [说明] 某公司要对其投放的自动售货机建立商品管理系统,其数据库的部分关系模式如下: 售货机:VEM(VEMno , Location),各属性分别表示售货机编号、部署地点; 商品:GOODS(Gno , Brand,Price),各属性分别表示商品编号、品牌名和价格; 销售单:SALES(Sno , VEMno, Gno, sDate, sTime),各属性分别表示销售号、售货机编号、 商品编号、日期和时间。 ……… 缺货单:OOS(VEMno, Gno, sDate, sTime ),各属性分别表示售货机编号、商品编号、日期和 时间。 相关关系模式的属性及说明如下: (1)售货机摆放固定种类的商品,售货机内每种商品最多可以储存10件。管理员在每天结束的时候将售货机中所有售出商品补全。 (2)每售出一件商品,就自动向销售单中添加一条销售记录。如果一天内某个售货机上某种商品的销售记录达到10条,则表明该售货机上该商品已售完,需要通知系统立即补货,通过自动向缺货单中添加一条缺货记录来实现。 根据以上描述,回答下列问题,将SQL语句的空缺部分补充完整。
问答题
1. [问题1] 请将下面创建销售单表的SQL语句补充完整,要求指定关系的主码和外码约束。 CREATE TABLE SALES ( Sno CHAR(8)______, VEMno CHAR(5)______, Gno CHAR(8)______, SDate DATE, STime TIME) ;
【正确答案】 PRIMARY KEY REFERENCES VEM(VEMno) REFERENCES GOODS(Gno)
【答案解析】
问答题
2. [问题2] 创建销售记录详单视图SALES_Detail,要求按日期统计每个售货机上各种商品的销售数量,属性有VEMno、Location、Gno、Brand、Price、amount和SDate。为方便实现,首先建立一个视图SALES_Total,然后利用SALES_Total完成视图SALES Detail的定义。 CREATE VIEW SALES_Total(VEMno, Gno, SDate, amount) AS SELECT VEMno, Gno, SDate, Count(*) FROM SALES GROUP BY ______; CREATE VIEW ______ AS SELECT VEM.VEMno, Location, GOODS.Gno, Brand, Price, amount, SDate FROM VEM, GOODS, SALES_Total WHERE ______ AND ______;
【正确答案】 VEMno,Gno,SDate SALES_Detail(VEMno,Location,Gno,Brand,Price,amount,SDate) VEM.VEMno=SALES_Total.VEMno GOODS.Gno=SALES_Total.Gno 注:后两空可互换
【答案解析】
问答题
3. [问题3] 每售出一件商品,就自动向销售单中添加一条销售记录。如果一天内某个售货机上某种商品的销售记录达到10条,则自动向缺货单中添加一条缺货记录。需要用触发器来实现缺货单的自动维护。程序中的GetTime()获取当前时间。 CREATE ______ OOS_TRG AFTER ______ ON SALES REFERENCING new row AS nrow FOR EACH ROW BEGIN INSERT INTO OOS SELECT SALES.VEMno, ______, GetTime() FROM SALES WHERE SALES.VEMno = nrow.VEMno AND SALES.Gno = nrow. Gno AND SALES.SDate = nrow. SDate GROUP BY SALES.VEMno, SALES.Gno, SALES.SDate HAVING count(*) > 0 AND mod(count(*), 10) = 0; END
【正确答案】 TRIGGER INSERT SALES.Gno,SALES.SDate
【答案解析】
问答题
4. [问题4] 查询当天销售最多的商品编号、品牌和数量。程序中的GetDate()获取当天日期。 SELECT GOODS.Gno, Brand, ______ FROM GOODS, SALES WHERE GOODS.Gno = SALES.Gno AND SDate = GetDate() GROUP BY ______ HAVING ______ ( SELECT count(*) FROM SALES WHERE SDate = GetDate() GROUP BY Gno );
【正确答案】 count(*) GOODS.Gno,Brand count(*)>=ALL
【答案解析】
问答题
5. [问题5] 查询一件都没有售出的所有商品编号和品牌。 SELECT Gno, Brand FROM GOODS WHERE Gno ______ ( SELECT DISTINCT Gno FROM ______);
【正确答案】 NOT IN或<>ANY(注:两者填其一个即可) SALES
【答案解析】 本题考查SQL应用,是比较传统的题目,要求考生细心分析题目中所描述的内容。 [问题1] 本问题考查SOL数据定义语言DDL和完整性约束。 完整性约束包括三类,实体完整性、参照完整性和用户定义的完整性。实体完整性约束规定关系的主属性不能取空值,关系模型中以主码作为唯一性标识;参照完整性约束规定:若属性(或属性组)A是关系R上的主码,B是关系S上的外码,A与B相对应(来自相同的域),则B取值为空或者来自于R上的某个A的值;用户定义的完整性约束是针对具体的数据库应用而定义的,它反映该应用所涉及的数据必须满足用户定义的语义要求。 第一空考查实体完整性约束,Sno是SALES的主码,用关键字PRIMARY KEY约束。第二空和第三空考查参照完整性约束,VEMno属性参照VEM关系模式中的VEMno属性,Gno属性参照GOODS关系模式中的Gno属性,空白处分别填入“REFERENCESVEM(VEMno)”和“REFERENCESGOODS(Gno)”。 [问题2] 本问题考查SQL创建视图的操作及应用。 需创建的第一个视图SALES Total(VEMno,Gno,SDate,amount)来自SALES表,属性分别对应SALES表中的VEMno、Gno、SDate、Count(*),其中,Count(*)要对SALES表中的VEMno、Gno、SDate进行分组计数,因此空第四空应填入“VEMno,Gno,SDate”。 需要创建的第二个视图SALES_Detail基于第一个已经创建的视图SALES_TOTAL和基本表VEM、GOODS。因此只需要把题意中需要统计的VEMno、Location、Gno、Brand、Price、amount、SDate从上述三个表中提取出来即可。第五空应填入“SALES_Detail(VEMno,Location,Gno,Brand,Price,amount,SDate)”。 WHERE条件后需要将三个表按照公共属性列连接起来,因此第五空和第七空分别填入“VEM.VEMno=SALES_Total.VEMno”和“GOODS.Gno=SALES_Total.Gno”即可(顺序可以互换)。 [问题3] 本问题考查触发器的设计与应用。 触发器是一个能由系统自动执行对数据库修改的语句。一个触发器由三部分组成:①事件,即对数据库的插入、删除和修改等操作。触发器在这些事件发生时,将开始工作:②条件,触发器将测试条件是否成立,若成立就执行相应的动作,否则就什么也不做;③动态,若触发器测试满足预定的条件,那么就由数据库管理系统执行这些动作。本题判断销售记录达到10条,则自动向缺货单中添加一条缺货记录。因此第八空处应填入“TRIGGER”,第九空处应填入“INSERT”,而第十空处应填入SALES表中的两个必要属性“SALES.Gno”和“SALES.SDate”。 [问题4] 本问题考查SQL的查询操作。 题意要求查询当天销售最多的商品编号、品牌和数量。SELECT语句后缺少数量,可以用count(*)来对分组后的商品销售数量进行统计。GROUP BY分组条件是商品号和品牌的组合,也就是GOODS.Gno和Brand。需要统计销售最多的商品,只需要在嵌套子查询前面使用count(*)>=ALL即可达到目的。 [问题5] 本问题考查SQL的查询操作。 题意要求查询一件都没有售出的所有商品编号和品牌,因此外层查询的Gno不在销售表中即可,第十一空处应填“NOTIN”或“<>ANY”。内层子查询统计的Gno来自于销售表SALES,因此第十二空处应填“SALES”。
提交答案
关闭