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