设在SQL Server 2008某数据库中建有图书表和销售表,两个表的定义如下: CREATE TABLE图书表( 书号char(10)PRIMARY KEY, 书名varchar(40), 图书类别varchar(20), 进价int)

admin2016-04-27  27

问题 设在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(销售数量)。
转载请注明原文地址:https://jikaoti.com/ti/d537FFFM
0

最新回复(0)