在电讯业务中,要记录用户的信息和通话的信息,因此,分别存在用户表和通话记录表,表的结构如下图所示:
表名
|
UserInfo
|
作用
|
存储通话用户的信息
|
主键
|
UserID
|
序号
|
字段名称
|
字段说明
|
类型
|
长度
|
属性
|
备注
|
1
|
UserID
|
主键、自动增长
|
Int
|
|
非空
|
|
2
|
UserName
|
用户姓名
|
nvarchar
|
30
|
非空
|
|
3
|
TelNo
|
用户电话号码
|
nvarchar
|
30
|
非空
|
|
4
|
Address
|
用户地址
|
nvarchar
|
100
|
允许空
|
|
图1:用户信息表
表名
|
TelRecord
|
作用
|
存储通话记录
|
主键
|
CommID
|
序号
|
字段名称
|
字段说明
|
类型
|
长度
|
属性
|
备注
|
1
|
CommID
|
主键、自动增长
|
Int
|
|
非空
|
|
2
|
TelFrom
|
主叫电话号码
|
nvarchar
|
30
|
非空
|
|
3
|
TelDest
|
被叫电话号码
|
nvarchar
|
30
|
非空
|
|
4
|
STime
|
通话开始时间
|
datetime
|
|
非空
|
|
5
|
ETime
|
通话结束时间
|
datetime
|
|
非空
|
|
图2:通话记录表
在通话记录表中每天将会产生大量的数据,每月有将近500万行记录。
请执行以下操作或回答以下的问题:
1、 请在数据库中建立电讯业务数据库Comm,并按以上的要求建立数据库表;
2、 用户在查询话费的时候,因为牵涉到多次通话时间的计算,系统反应比较慢,从数据库的角度考虑,有何好的办法来缓解这个问题?
3、 分别为用户信息表、通话记录表输入以下的测试数据(或者使用SQL语句插入),如下图所示:
图3:用户信息表中的数据
图4:通话记录表的数据
4、 编写SQL语句,查询至少有2个电话的用户名、电话号码的个数;
5、 编写SQL语句,查询通话时间少于1分钟的通话ID;
6、 编写SQL语句,找出通话记录表中存在的电话号码而在用户信息表中没有的电话号码,然后把这些电话号码插入到用户信息表中,新插入的数据用户名为“未知”、地址为“未知”;
7、 编写存储过程,按输入的月份、主叫号码统计通话记录、通话总时间;
8、 对于通话记录表中存在大数据量的情况,你有哪些查询的优化建议?
//答案
说明:两张关联表,删除主表中已经在副表中没有的信息 delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 ) 说明:日程安排提前五分钟提醒 select * from 日程安排 where datediff('minute',f开始时间,getdate())>5 说明:删除重复记录 delete from tablename where id not in (select max(id) from tablename group by col1,col2,...) 说明:外连接查询(表名1:a 表名2:b) select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
--1、 请在数据库中建立电讯业务数据库Comm,并按以上的要求建立数据库表;
if exists (select * from sysdatabases where name = 'Comm')
drop database Comm
go
create database Comm
on
(
name = 'Comm_data',
filename = 'd:\Comm_data.mdf',
size = 3mb,
maxsize = 10mb,
filegrowth = 10%
)
log on
(
name = 'Comm_log',
filename = 'd:\Comm_log.ldf',
size = 10mb,
maxsize = 1000mb,
filegrowth = 50%
)
go
/*---创建表UserInfo---*/
use Comm
go
if exists (select * from sysobjects where name = 'UserInfo')
drop database UserInfo
go
create table UserInfo
(
UserID int not null identity(1,1) primary key,
UserName varchar(30) not null,
UelNo nvarchar(30) not null,
Address nvarchar(100) not null
)
go
/*---创建用户信息表---*/
if exists (select * from sysobjects where name = 'TelRecord')
drop database TelRecord
go
create table TelRecord
(
CommID int identity(1,1) primary key,
TelFrom nvarchar(30) not null,
TelDest nvarchar(30) not null,
STime datetime not null,
ETime datetime not null
)
go
--2、 用户在查询话费的时候,因为牵涉到多次通话时间的计算,
--系统反应比较慢,从数据库的角度考虑,有何好的办法来缓解这个问题?
/*可以创建索引,再分组查询*/
create index IX_TelRecord_TelFrom
on TelRecord(TelFrom)
with fillfactor = 10
go
/*3分别为用户信息表、通话记录表输入以下的测试数据(或者使用SQL语句插入),
如下图所示:*/
select * from UserInfo
insert into UserInfo values('张三丰','98290000','湖北')
insert into UserInfo values('朱算','68290900','上海')
insert into UserInfo values('胡柳','0215466546656','上海')
insert into UserInfo values('朱算','21546654666','上海')
insert into UserInfo values('杨飞','035730928370','山东')
insert into UserInfo values('胡一三','78290000','山东')
insert into TelRecord values('98290000','0216566656654','2007-2-1 9:49:53','2007-2-1 9:50:16')
insert into TelRecord values('98290000','0216566656654','2007-2-1 9:49:53','2007-2-1 9:50:16')
insert into TelRecord values('98290000','021546654666','2007-2-1 9:50:29','2007-2-1 9:51:41')
insert into TelRecord values('98290000','021546654666','2007-2-1 9:50:58','2007-2-1 9:51:12')
insert into TelRecord values('68290900','075513329866','2007-2-2 10:04:31','2007-2-2 10:07:13')
insert into TelRecord values('78290000','0755255708638','2007-2-1 10:48:31','2007-2-1 10:49:23')
insert into TelRecord values('78290000','0755821119109','2007-2-1 10:49:39','2007-2-1 10:52:55')
insert into TelRecord values('78290000','035730928370','2007-2-3 11:30:45','2007-2-3 11:31:58')
insert into TelRecord values('78290000','0871138889904','2007-2-1 11:33:47','2007-2-1 11:35:00')
insert into TelRecord values('68290000','035730928379','2007-2-1 11:52:20','2007-2-1 11:54:56')
insert into TelRecord values('68290000','0298521811199','2007-2-1 12:44:45','2007-2-1 12:45:04')
insert into TelRecord values('68290000','0298521811199','2007-2-1 12:44:45','2007-2-1 12:45:04')
select * from TelRecord
delete TelRecord where CommID = 2 or CommID = 11
select dateDiff(ss,'2007-2-1 9:50:22','2007-2-1 9:51:12')
--4、编写SQL语句,查询至少有2个电话的用户名、电话号码的个数;
select * from UserInfo
select UserName,电话个数=count(UelNo) from UserInfo group by UserName having count(UserName) >1
--5、编写SQL语句,查询通话时间少于1分钟的通话ID
select * from TelRecord
select CommID from TelRecord where datediff(ss,STime,ETime)<60
/*--6
编写SQL语句,找出通话记录表中存在的电话号码而在用户信息表中没有的电话号码,
然后把这些电话号码插入到用户信息表中,新插入的数据用户名为“未知”、地址为“未知”;
*/
select * from UserInfo
select * from TelRecord
insert into UserInfo select distinct '未知',TelFrom,'未知' from TelRecord where TelFrom not in (select UelNo from UserInfo)
insert into UserInfo select distinct '未知',TelDest,'未知' from TelRecord where TelDest not in (select UelNo from UserInfo)
--7、编写存储过程,按输入的月份、主叫号码统计通话记录、通话总时间;
select * from TelRecord
alter procedure zsw
@month int ,
@TelFrom nvarchar(30)
as
set nocount on
print convert(char(2),@month)+'月期间,主叫号码'+@TelFrom+'通过记录为:'
select * from TelRecord where datename(mm,STime)=@month and TelFrom=@TelFrom
declare @time int
select @time=sum(datediff(ss,STime,ETime)) from TelRecord where datename(mm,STime)=@month and TelFrom=@TelFrom
print convert(char(2),@month)+'月期间,主叫号码'+@TelFrom+'通过总时间为:'+convert(varchar(15),@time)+' 秒'
go
exec zsw 2,98290000
分享到:
相关推荐
在SQL争霸赛中,参赛者将面临一系列挑战,旨在测试他们在SQL语言中的技能和知识。SQL,全称Structured Query Language,是一种用于管理关系数据库的标准语言,包括查询、更新、插入和删除数据,以及创建和修改数据库...
【SQL争霸赛.shshshhshsh】这个标题可能是在暗示一种关于SQL技能的比赛或者活动,其中".shshshhshsh"可能是由于输入错误或者是某种加密或编码方式,但在此我们主要关注"SQL争霸赛"这部分。在IT领域,SQL(Structured...
【SQL争霸赛决赛试题附答案】是一场针对SQL技能的竞赛活动,旨在检验参赛者对SQL语言的理解和应用能力。SQL(Structured Query Language)是用于管理和处理关系数据库的标准编程语言,广泛应用于数据查询、更新、...
在SQL Server数据库管理系统中,SQL争霸赛是一种挑战性极强的比赛,旨在测试并提升参赛者在SQL语言和数据库管理方面的技能。SQL Server是Microsoft公司推出的一款关系型数据库管理系统(RDBMS),它提供了广泛的功能...
在"SQL争霸赛4 sqlserver"这一主题中,我们聚焦于SQL Server数据库管理系统,这是微软公司推出的一款强大的关系型数据库系统。SQL Server以其高效、安全和可扩展性,在企业级应用中占据着重要地位。本争霸赛可能包含...
【ACCP5.0 S2 SQL争霸赛决赛试题】是一个针对北大青鸟ACCP5.0第二阶段学员的高级SQL技能测试。这个竞赛旨在检验学生对SQL语言的深入理解和应用能力,尤其是对于复杂查询和数据操作的部分。在这个过程中,学生们需要...
《SQL争霸赛4-源码》是一个聚焦于SQL语言学习与竞技的资源包,其中包含了丰富的源代码示例,旨在帮助参赛者提升SQL查询技能。SQL(Structured Query Language)是用于管理和处理关系数据库的标准编程语言,它在数据...
北大青鸟 SQL 争霸赛决赛试题解析 本资源摘要信息将对北大青鸟 SQL 争霸赛决赛试题进行解析,涵盖数据库设计、 SQL 语句编写、存储过程编写、查询优化等多方面的知识点。 数据库设计 根据题目要求,我们需要设计...
在电讯业务中,数据库的设计和优化对于高效的数据处理至关重要。以下是根据题目要求和提供的信息...以上是针对SQL争霸赛决赛试题的解答,涵盖了数据库设计、性能优化、数据插入、查询编写以及存储过程的创建等知识点。
sql server争霸赛
### SQL数据库争霸赛知识点解析 #### 一、数据库的基本概念 1. **数据库的定义**: - **正确答案:C、数据库是一个结构化的数据集合**。 - **解析**:数据库是按照一定的数据模型组织起来,并存储在计算机存储...
在"项目实战答案"和"SQL争霸赛答案"这两个文件中,很可能包含了上述各种知识点的实际应用案例和解题策略。通过分析这些答案,可以深入理解如何在实际场景中运用SQL,提高自己的数据库操作技能。同时,也可以从错误...
ACCP5.0 S2 DBA争霸赛参考(SQLServer2005)
在SQL争霸赛中,可能会涉及性能优化的知识,比如索引的使用、查询计划的分析、分区和聚集等技术。索引可以显著提升数据检索的速度,但也会占用额外的存储空间。查询计划可以帮助我们了解SQL Server如何执行查询,...
6. 数据文件(如SQL数据库文件):如果博客支持用户注册和评论,这些文件可能用于存储用户信息和帖子内容。 安装和使用这个模版通常需要一定的技术基础,包括熟悉FTP上传、编辑HTML和CSS代码,以及设置服务器环境。...