问答题 设在SQL Server 2008某数据库中建有图书表和销售表,两个表的定义如下: CREATE TABLE图书表( 书号char(10)PRIMARY KEY,书名varchar(40), 图书类别varchar(20), 进价int); CREATE TABLE销售表( 书号char(10)REFER.ENCES图书表(书号), 销售时间datetime, 销售数量int, 售价int, PRIMARY KEY(书号,销售时间)); 现要创建一个存储过程:查询指定类别的每种图书在当前年累计销售总数量。请补全下列代码。 CRE ATE PROC p_TotalSales @lb varchar(20) AS SELECT书名, ( SEIJECT _______ FROM销售表t1 wHERE_______and year(销售时间)=year(_______) )AS销售总数量 FROM图书表t2 WHERE _______
【正确答案】正确答案:第一空:SUM(销售数量) 第二空:t1.书号=t2.书号或t2.书号=t1.书号 第三空:Getdate() 第四空:t2.图书类别=@lb
【答案解析】解析:①整个SELECT语句的含义是:根据WHERE子句的条件表达式,从FROM子句指定的基本表或视图中找出满足条件的元组,再按SELECT子句中的目标列表达式,选出元组中的属性值形成结果表。 ②该题中“SELECT 【1】FROM销售表t1 WHERE【2】and year(销售时间)=year(【3】)”是个嵌套,计算销售总数量。 ③语句执行过程: 先从图书表中按照第二个WHERE子句形成一个初步查询结果。由于只有图书表中有“图书类别”字段,因此可知第四空填写:t2.图书类别=@lb(t2是图书表的别名,t1是销售表的别名)。由此可知该步是按给定“图书类别”查询。 计算销售总数量语句应该在第一步的基础上求某年的总量。因此可以推断第三空是获得销售时间语句。因此该空填写Getdate()。由于是在第一步基础上的查询,所以应该实行连表查询,第二空应该填写连接的条件,即t1.书号=t2.书号或t2.书号=t1.书号。 第一空应该是求总量的语句,即SUM(销售数量)。