数据库—面试题

有个公司向我们的学生出了个有关于数据库的面试题,分析了一下,总共整出来两条解决方案,和大家分享分享

题:两张表  create table tbA(aid  int,dis int) create table tbB( bid int,com int)

tbB表 根据bid的分组,求com的和的 结果  填充到tbA的dis中,条件是 tbA的aid 与tbB的bid 相等

解决问题思路一:

游标能做到快速遍历,优点:读取速度快,效率高

对tbB表的bid分组,求com的和 将这个结果集遍历,然后当tbA的aid与 这个结果集的bid相等的时候,就对tbA的dis 字段进行修改

declare @id int  ---定义变量1

declare @sum int  ---定义变量2

declare cu_test cursor  ---定义一个游标

for

select   bid,sum(com) from tbB group by bid   --对tbB表的bid分组,求com的和

open cu_test   --------打开游标

fetch next from  cu_test into @id,@sum  ------取游标的第一行数据到变量@id,@sum中

while(@@fetch_Status=0) --只要游标的读取状态为0,就继续循环

begin

update tbA set dis=@sum where aid=@id  

fetch next from cu_test into @id,@sum

end

close cu_test   ---关闭游标

deallocate cu_test ------也可以删除游标

解决思路二:直接用sql语句来实现,总体是个update,这样做和游标比起来,数据如果很多,效率很显然就低

关于几个结果集以上的不同的数据源(sqlserver)修改模板为:

update table1 set colum1=table2.column
    from  table1,table2
    where table1.column=table2.coulumn    ---条件

所以我们的解题思路也出来了:

update tba set dis=tb.com from
    (select bid, SUM(com)as com from tbb group by bid) tb,tba
    where tba.aid=tb.bid

以上两种思路,仅供参考

顺便再把不同数据源的数据集导入 的 insert into 语句模板做一下备注:

insert into  表名1(列名1,列名1...)

select 列名11,列名22...

from 表名1,表名2

where 条件

结果集存入临时表模板:

select 列名1,列名2,列名3...  into  #table  --临时表

from

结果集 

 

你可能感兴趣的:(sql,数据库,面试,table,insert,sqlserver)