SqlServer中的几个疏漏的知识点--联合查询,索引键,几个练习

1.联合查询

 使用联合查询,可以将两个相同列不同表的数据合并到一张表查询出来,例子:

select id,name form p_q union select id,name from p_s

当两张表中有重复的数据的时候,union会自动去重,则时候要使用union all
select id,name from p_q union all select id,name from p_s

2.sql中的索引键
 当我们需要经常查询数据的时候,这时候可以建立索引,提高查询效率,但是这样也有缺陷,insert和updata和

delete的时候,效率会相对比较低,因为在更新数据库的同事还需要同时更新索引

建立索引的办法,现在的可视化建表工具中都提供了建立索引的功能,你可以根据自己使用的工具到网上寻找建立索引的办法

3.sql中的几个练习题
 
 1.习题1 表名Test
  id        count
   1        10
   2        20
   3        -30
         4 -10
转成
  单号 收入 支出
1      10   0
2      20   0
3      0    30
4        0    30

用sqlserver语法实现上面操作
 
 
 
select id(
case
when count > 0 then count
else 0
end
)as 收入,
(
case
when count<0 then count
else 0
end
) 
from Test
2.习题2

data       name    score 
2008-8-8    拜仁   胜
2008-8-9    奇才    胜
2008-8-9    湖人   胜
2008-9-10    拜仁   负
2008-8-8    拜仁   负
2008-8-12  奇才   胜
要求输出下面格式
name  胜  负
拜仁  1    2
湖人  1    0
奇才  2    0

 

select name,
sum((
case score
when N'胜' then 1
else 0
end
))as 胜,
sum((
case score
when N'负' then 1
else 0
end
))as 负
from Test group by name
<hr>

创建一张表,记录电话呼叫员的流水,记录呼叫员编号、对方号码、通话开始时间、

通话结束时间。

输出所有数据中通话时间最长的5条记录

输出所有数据中拨打长途号码(对方号码以0开头)的总时长

输出本月通话总时长最多的前三个呼叫员的编号

输出本月拨打电话次数最多的前三个呼叫员的编号


 输出所有数据的拨号流水,并且在最后一行添加总呼叫次数

 呼叫员编号、对方号码、通话时长

汇总市内号码总时长】【长途号码总时长】

 1,select top 5 * from Test order by DateDiff(second,StartDateTime,EndDateTime) Desc

  2.select sum(datediff(second,startdatetime,gettime())) from Test where TelNum like "0%"

3.select top 3 callername from test

where datediff(month,starttime,endtime) = 0

group by callernum

 order by sum(datediff(second,starttime,endtime)) desc

4,select top 3 callernum from Test

where datediff(month,starttime,gettime())

group by callernum

order by count(*) desc

5-----汇总

select callerNum,telNum,datediff(second,starttime,endtime) from Test

union all

select '汇总'

convert(varchar(50),

sum((

case

when telNum not like "0%" then datediff(second,starttime,endtime)

else 0

))


) as 短途电话,

((

case

when telaNum like "0%" then datediff(second,starttime,endtime)

else 0

))

from Test












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值