SQLSEREVER测试题
作者:admin 日期:2010-03-16
SQLSEREVER测试题(上)
一 SQLSERVER管理部分
1 请讲出身份验证模式与登录帐号的关系及如何用各种帐号进行登录,并画出示意图
2 请讲出登录帐号、数据库用户及数据库角色之间的关系,并画出示意图
3 请讲出数据库用户、数据库角色与数据库对象之间的关系,并画出直接对用户授权与间接对用户授权(系统权限与对象权限)的方法
4 请讲出服务器角色、数据库角色、标准角色与应用程序角色的区别与验证其权限的方法
5 请讲出数据库还原模型对数据库的影响
6 有一个执行关键任务的数据库,请设计一个数据库备份策略
7 请使用文件与文件组恢复的方式恢复数据库
8 请使用事务日志恢复数据库到一个时间点
9 请设计作业进行周期性的备份数据库
10 如何监控数据库的阻塞,并实现数据库的死锁测试
11 如何监控数据库的活动,并能使用索引优化向导生成索引
12 理解数据库框图的作用并可以设计表与表之间的关系
SQL代码
- SQLSEREVER测试题(中)
- 二 SQLSERVER的实现部分
- 1 有订单表,需要实现它的编号,格式如下:200211030001……200222039999等
- 2 有表T1,T2,现有一事务,在向表T1添加数据时,同时也必须向T2也添加数据,如何实现该事务
- 3 如何向T1中的编号字段(code varchar(20))添加一万条记录,不充许重复,规则如下:编号的数据必须从小写的a-z之间取值
- 4 如何删除表中的重复数据,请使用游标与分组的办法
- 5 如何求表中相邻的两条记录的某字段的值之差
- 6 如何统计数据库中所有用户表的数据,显示格式如下:
- 表名 记录数
- sales 23
- 7 如何删除数据库中的所有用户表(表与表之间有外键关系)
- 8 表A editor_id lb2_id
- 123 000
- 123 003
- 123 003
- 456 007
- 456 006
- 表B lb2_id lb2_name
- 000 a
- 003 b
- 006 c
- 007 d
- 显示 a 共1条 (表A内lb2_id为000的条数)
- b 共2条(表A内lb2_id为003的条数)
- 9 人员情况表(employee):里面有一字段文化程度(wh):包括四种情况(本科以上,大专,高中,初中以下),现在我要根据年龄字段查询统计出:表中文化程度为本科以上,大专,高中,初中以下,各有多少人,占总人数多少。
- Select wh AS 学历,age as 年龄, Count(*) AS 人数,
- Count(*) * 100 /(Select Count(*) FROM employee) AS 百分比
- FROM employee GROUP BY wh,age
- 学历 年龄 人数 百分比
- 本科以上 20 34 14
- 大专 20 33 13
- 高中 20 33 13
- 初中以下 20 100 40
- 本科以上 21 50 20
- 10 现在有三个表student:(FID 学生号,FName 姓名),
- subject:(FSubID 课程号,FSubName 课程名),
- Score(FScoreId 成绩记录号,FSubID 课程号,FStdID 学生号,FScore 成绩)
- 怎么能实现这个表:
- 姓名 英语 数学 语文 历史
- 张萨 78 67 89 76
- 王强 89 67 84 96
- Select a.FName AS 姓名,
- 英语 = SUM(CASE b.FSubName WHEN '英语' THEN c.FScore END),
- 数学 = SUM(CASE b.FSubName WHEN '数学' THEN c.FScore END),
- 语文 = SUM(CASE b.FSubName WHEN '语文' THEN c.FScore END),
- 历史 = SUM(CASE b.FSubName WHEN '历史' THEN c.FScore END)
- FROM Student a, Subject b, Score c
- Where a.FID = c.FStdId AND b.FSubID = c.FsubID GROUP BY a.FName
- 11 原始表的数据如下:
- PID PTime PNo
- 111111 2003-01-28 04:30:09
- 111111 2003-01-28 18:30:00
- 222222 2003-01-28 04:31:09
- 333333 2003-01-28 04:32:09
- 111111 2003-02-09 03:35:25
- 222222 2003-02-09 03:36:25
- 333333 2003-02-09 03:37:25
- 查询生成表
- PDate 111111 222222 333333 ......
- 2003-01-28 04:30:09 04:31:09 04:32:09 ......
- 2003-01-28 18:30:00
- 2003-02-09 03:35:25 03:36:25 03:37:25 ......
- 12 表一(AAA)
- 商品名称mc 商品总量sl
- A 100
- B 120
- 表二(BBB)
- 商品名称mc 出库数量sl
- A 10
- A 20
- B 10
- B 20
- B 30
- 用一条SQL语句算出商品A,B目前还剩多少?
- 一
- declare @AAA table (商品名称 varchar(10), 商品总量 int)
- insert into @AAA values('A',100)
- insert into @AAA values('B',120)
- declare @BBB table (商品名称 varchar(10), 出库数量 int)
- insert into @BBB values('A', 10)
- insert into @BBB values('A', 20)
- insert into @BBB values('B', 10)
- insert into @BBB values('B', 20)
- insert into @BBB values('B', 30)
- select TA.商品名称,A-B AS 剩余数量 FROM
- (select 商品名称,sum(商品总量) AS A
- from @AAA
- group by 商品名称)TA,
- (select 商品名称,sum(出库数量) AS B
- from @BBB
- group by 商品名称)TB
- where TA.商品名称=TB.商品名称
- 二
- select 商品名称,sum(商品总量) 剩余数量 from (select * from @aaa union all select 商品名称,-出库数量 from @bbb) a group by 商品名称
- 13 优化这句SQL语句
- Update tblExlTempYear
- SET tblExlTempYear.GDQC = tblExlTempMonth.GDQC
- FROM tblExlTempYear,tblExlTempMonth
- where tblExlTempMonth.GDXM=tblExlTempYear.GDXM and tblExlTempMonth.TXDZ=tblExlTempYear.TXDZ
- (1)、加索引:
- tblExlTempYear(GDXM,TXDZ)
- tblExlTempMonth (GDXM,TXDZ)
- (2)、删除无用数据
- (3)、转移过时数据
- (4)、加服务器内存,升级服务器
- (5)、升级网络系统
- Update tblExlTempYear
- SET tblExlTempYear.GDQC = tblExlTempMonth.GDQC
- FROM tblExlTempYear (index indexY),tblExlTempMonth (index indexM)
- where tblExlTempMonth.GDXM=tblExlTempYear.GDXM and tblExlTempMonth.TXDZ=tblExlTempYear.TXDZ
- 14 品种 日期 数量
- P0001 2002-1-10 10
- P0001 2002-1-10 11
- P0001 2002-1-10 50
- P0001 2002-1-12 9
- P0001 2002-1-12 8
- P0001 2002-1-12 7
- P0002 2002-10-10 5
- P0002 2002-10-10 7
- P0002 2002-10-12 0.5
- P0003 2002-10-10 5
- P0003 2002-10-12 7
- P0003 2002-10-12 9
- 结果要先按照品种汇总,再按照日期汇总,结果如下:
- P0001 2002-1-10 71
- P0001 2002-1-12 24
- P0002 2002-10-10 12
- P0002 2002-10-12 0.5
- P0003 2002-10-10 5
- P0003 2002-10-12 16
- SQL SERVER能做出这样的汇总吗…
- 15 在分組查循中with{cube|rollup}的區別是什么?
- 如:
- use pangu
- select firm_id,p_id,sum(o_price_quantity)as sum_values
- from orders
- group by firm_id,p_id
- with cube
- 與
- use pangu
- select firm_id,p_id,sum(o_price_quantity)as sum_values
- from orders
- group by firm_id,p_id
- with rollup
- 的區別是什么?
- CUBE 和 ROLLUP 之间的区别在于:
- CUBE 生成的结果集显示了所选列中值的所有组合的聚合。
- ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。
- 例如,简单表 Inventory 中包含:
- Item Color Quantity
- -------------------- -------------------- --------------------------
- Table Blue 124
- Table Red 223
- Chair Blue 101
- Chair Red 210
- 下列查询将生成小计报表:
- Select CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'
- ELSE ISNULL(Item, 'UNKNOWN')
- END AS Item,
- CASE WHEN (GROUPING(Color) = 1) THEN 'ALL'
- ELSE ISNULL(Color, 'UNKNOWN')
- END AS Color,
- SUM(Quantity) AS QtySum
- FROM Inventory
- GROUP BY Item, Color WITH ROLLUP
- Item Color QtySum
- -------------------- -------------------- --------------------------
- Chair Blue 101.00
- Chair Red 210.00
- Chair ALL 311.00
- Table Blue 124.00
- Table Red 223.00
- Table ALL 347.00
- ALL ALL 658.00
- (7 row(s) affected)
- 如果查询中的 ROLLUP 关键字更改为 CUBE,那么 CUBE 结果集与上述结果相同,只是在结果集的末尾还会返回下列两行:
- ALL Blue 225.00
- ALL Red 433.00
- CUBE 操作为 Item 和 Color 中值的可能组合生成行。例如,CUBE 不仅报告与 Item 值 Chair 相组合的 Color 值的所有可能组合(Red、Blue 和 Red + Blue),而且报告与 Color 值 Red 相组合的 Item 值的所有可能组合(Chair、Table 和 Chair + Table)。对于 GROUP BY 子句中右边的列中的每个值,ROLLUP 操作并不报告左边一列(或左边各列)中值的所有可能组合。例如,ROLLUP 并不对每个 Color 值报告 Item 值的所有可能组合。ROLLUP 操作的结果集具有类似于 COMPUTE BY 所返回结果集的功能;然而,
- ROLLUP 具有下列优点: ROLLUP 返回单个结果集;COMPUTE BY 返回多个结果集,而多个结果集会增加应用程序代码的复杂性。ROLLUP 可以在服务器游标中使用;COMPUTE BY 不可以。有时,查询优化器为 ROLLUP 生成的执行计划比为 COMPUTE BY 生成的更为高效。
- 16 假如我有两个表
- 表1(电话号码,是否存在)
- 表2(电话号码,是否拨打)
- 想查找表1中的电话号码是否在表2中存在,如果存在就更新表1中的是否存在字段为1。
- Update 表1 SET 是否存在=1
- Where EXISTS(Select * FROM 表2 Where 表2.电话号码 = 表1.电话号码)
- 17 用存储过程调用外部程序.
- 不过要做成com控件
- 用sp_OACreate存储过程)
- DECLARE @object int
- DECLARE @hr int
- DECLARE @src varchar(255), @desc varchar(255)
- EXEC @hr = sp_OACreate 'SQLDMO.SQLServer', @object OUT
- IF @hr <> 0
- BEGIN
- EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
- Select hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
- RETURN
- END







