1.联合查询
使用联合查询,可以将两个相同列不同表的数据合并到一张表查询出来,例子:
select id,name form p_q union select id,name from p_s
select id,name from p_q union all select id,name from p_s
2.sql中的索引键
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
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