几道熟悉的面试题

时间:2022-11-20 14:21:16
 
产品表                   销售计划表
int         nchar(10) int              int          nchar(10)   int          int
ProductID  产品名 单价                       ProductID     客户名  订货数量  销售单价
   1       name1   110                          2           m          2          250
   2       name2   220                          1           n          3          110
   3       name3   330                          3           n          1          300
   4       name4   440                      
    4           m          2          400
1.
是否能删除产品表中的 name2 ?请说明理由与过程。
2.
将销售计划表中 m 客户的产品名为 name2 的销售单价更换为产品表中相应的单价
3. 求销售计划表中各客户各自的销售总金额的 sql 语句    (有难度)

 看到网上有很多直接 update  或者sum 的解答,感觉都不明朗,或者说是感觉完全错误的解答.我自己做了一下.呵呵,不知道我是不是做的复杂了,但我还是比较高兴,还记得SQL语句怎么写的.

回答:
1.       分两种情况:
如果产品名的字段类型设置 为 null, 则可为空,若设置为 not null则不可为空。由于产品名不是 唯一的。
2.        
create procedure Exchange
as
declare @danjia int;
select @danjia =(select  产品表 . 单价 from 产品表 inner join 销售计划表 on " 产品表 ".ProductID = " 销售计划表 ".ProductID where " 销售计划表 ". 客户名 = 'm' and " 销售计划表 ".ProductID = 2);
begin
update 销售计划表 set 销售单价 = @danjiawhere ProductID=2;
end
exec Exchange
drop proc Exchange
 
create view countmoney
as
select 产品表 . 单价 * 销售计划表 . 订货数量 as " 销售金额 ", 产品表 . productID, 销售计划表 . 客户名 as 客户名 from 产品表 inner join 销售计划表 on " 产品表 ".ProductID= 销售计划表 . ProductID;
-- 先建立视图,试图中包含销售金额 --
drop view countmoney
create procedure coun @customor nchar(10)
as
declare @summo int;
select @summo=(select sum( 销售金额 ) from countmoney where 客户名 = @customor);
print @summo;
exec coun @customor='n'
drop proc coun