SQLSEREVER测试题

SQLSERVER管理部分

1 请讲出身份验证模式与登录帐号的关系及如何用各种帐号进行登录,并画出示意图

2 请讲出登录帐号、数据库用户及数据库角色之间的关系,并画出示意图

3 请讲出数据库用户、数据库角色与数据库对象之间的关系,并画出直接对用户授权与间接对用户授权(系统权限与对象权限)的方法

4 请讲出服务器角色、数据库角色、标准角色与应用程序角色的区别与验证其权限的方法

5 请讲出数据库还原模型对数据库的影响

6 有一个执行关键任务的数据库,请设计一个数据库备份策略

7 请使用文件与文件组恢复的方式恢复数据库 

8 请使用事务日志恢复数据库到一个时间点

9 请设计作业进行周期性的备份数据库

10 如何监控数据库的阻塞,并实现数据库的死锁测试

11 如何监控数据库的活动,并能使用索引优化向导生成索引

12 理解数据库框图的作用并可以设计表与表之间的关系

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 (表Alb2_id000的条数)
   b   2条(表Alb2_id003的条数)  

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)、加索引:

tblExlTempYearGDXMTXDZ

tblExlTempMonth GDXMTXDZ

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 值的所有可能组合(RedBlue Red + Blue),而且报告与 Color Red 相组合的 Item 值的所有可能组合(ChairTable 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

18 以下作业皆以*.sql文件存储于c:/homework目录中

实践1:创建和维护SQL Server数据库

(1)      使用下表提供的值,创建数据库ClassNorthwind

           

数据库名称

ClassNorthwind

数据库文件名

ClassNorthwind_Data

位置

C:/data

初始大小

25MB

文件组

Primary

文件增长

1MB

最大文件长度

100MB

事务日志文件名称

ClassNorthwind_Log

位置

C:/data

初始大小

15MB

文件增长

1MB

最大文件长度

30MB

 

 

 

 

 

 

 

 

(2)       使用sp_helpdb存储过程浏览有关数据库ClassNorthwind的信息

(3)       修改数据库属性

l         编写和执行将ClassNorthwind事务日志文件的最大文件长度增加到50MB的语句

l         编写和执行向数据库ClassNorthwind添加一个事务日志文件ClassNorthwind_LogApp,文件属性如下:

位置

C:/dataapp

初始大小

20MB

文件增长

1MB

最大文件长度

40MB

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

实践2:创建和修改SQL Server数据库的表

(1)      创建数据库ClassNorthwind中的雇员表Employees、雇员工资表wage和工资税表tax

雇员表Employees:

     

     

     

EmployeeID

Intidentity ,初值为1,增量为1

NOT NULL

Name

VarChar(10)

NOT NULL

Sex

Char(2)

NOT NULL

Birthdate

Date

NULL

Address

Varchar(50)

NULL

Phone

Char(13)

NULL

Remark

text

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

雇员工资表wage:

     

     

     

EmployeeID

Int

NOT NULL

Name

VarChar(10)

NOT NULL

Wage

money

NOT NULL

Putdate

Date

NOT NULL

 

 

 

 

 

 

 

 

工资税表tax:

     

     

     

EmployeeID

Int

NOT NULL

Name

VarChar(10)

NOT NULL

Tax

money

NOT NULL

Paydate

Date

NOT NULL

 

 

 

 

 

 

 

 

(2)       雇员表Employees中添加列Department varchar(20) NULL

(3)       修改雇员表Employees中的列Address varchar(60)

(4)       删除雇员表Employees中的列Remark

(5)       用存储过程sp_help查看三个表的信息

(6)       向雇员表Employees中插入十个雇员信息

(7)       向雇员工资表wage中插入十个雇员相应的工资发放情况信息

(8)       向工资税表tax中插入十个雇员相应的交税情况

 

 

 

 

 

 

 

 

实践3:创建SQL Server数据库表的视图和索引

(1)      在雇员表Employees中,创建一个namephone列上的合成索引

(2)      使用存储过程sp_helpindex Employees列出表的索引

(3)      分别查询雇员表Employees、雇员工资表wage和工资税表tax中的行数据

(4)      创建一个视图,用于检索雇员工资、税款情况,包括下列字段:

EmployeeIDNameSexWagePutdate TaxPaydate

(5)      创建一个视图,用于检索雇员工资高于1000元的雇员情况表

(6)      创建一个视图,用于检索雇员工资高于5000元的雇员情况表

 

 

 

 

 

 

 

 

实践4:查询SQL Server数据库表的信息

(1)      列出每个雇员的工资、税款情况一览表

(2)      列出工资超过1000元,而未交税的雇员

(3)      列出工资在1000元以下,不应该交税的雇员情况一览表

(4)      列出只领工资而未交税的雇员表

(5)      对以上四种情况各作一统计报告

(6)      删除三个表中的所有记录

 

 

 

 

 

 

 

 

实践5:实现SQL Server数据库的完整性

(1)      创建雇员表Employees的主关键字,列:EmployeeID

(2)      创建雇员工资表wage的外部关键字,列:EmployeeID,参考Employees的主键

(3)      创建工资税表tax的外部关键字,列:EmployeeID,参考Employees的主键

(4)      向雇员表Employees中添加关于以下列的DEFAULT约束:

nameunknownsex:男,AddressSalt LakePhone(000)00000000

(5)      向雇员表Employees中添加BirthDate列的CHECK约束:在BirthDate列中的值必须早于今天的日期

(6)      定义雇员电话号码Phone的规则:(***)********,其中*0~9之间的数字字符

(7)      执行存储过程sp_helpconstraint浏览上面创建的约束信息

(8)      向雇员表Employees中插入十个雇员信息,并检查约束

(9)      向雇员工资表wage和工资税表tax中添加关于以下列的DEFAULT约束:

Putdate:昨天,Paydate:昨天

 

 

 

 

 

 

 

 

实践6SQL Server数据库的高级查询

(1)      分别列出在雇员表Employees中而未领工资和未交税的男、女雇员情况

(2)       查询电话号码区号为(010)、工资大于3000的男雇员情况

(3)       查询交税最多的六名雇员情况

(4)       列出工资在前六名的,而交税并不在前六名的雇员情况

 

 

 

 

 

 

 

 

实践7:创建、执行、修改SQL Server数据库的存储过程

(1)      编写存储过程,向雇员表Employees、雇员工资表wage和工资税表tax中各插入两条记录

(2)      编写存储过程,列出工资最高的六名雇员情况

(3)      编写存储过程,查找雇员表EmployeesSexPhone与指定值相匹配的雇员

(4)      编写存储过程,查找雇员表EmployeesBirthDate在指定两个日期之间的雇员

(5)      编写存储过程,用于计算男、女雇员的平均工资,男、女雇员的人数,并输出

(6)      用存储过程sp_helptext查看上面的存储过程定义

 

 

 

 

 

 

 

 

实践8:创建和使用SQL Server数据库的触发器

(1)      创建触发器,从雇员表Employees中一次删除的记录数应不超过2

(2)       创建触发器,当向雇员工资表wage中插入记录时,同时向工资税表tax中插入记录,工资税计算为:

Wage1000以下,不交税;1000~5000:交税工资的1%

5000以上:交税工资的3%

(3)       创建触发器,当修改雇员工资表wage中的记录时,同时修改工资税表tax中的记录

(4)       创建触发器,当删除雇员表Employees中的记录时,同时删除雇员工资表wage和工资税表tax中的有关该雇员的所有记录

(5)       创建触发器,当修改工资税表taxTax列的值时,检查交税情况是否符合(2)的交税比例

(6)       测试上面创建的触发器

 

 

 

 

 

 

 

 

实践9:使用SQL Server数据库的游标

(1)      使用游标获取雇员表Employees中的记录

(2)      使用游标检查雇员工资税的交纳是否正确

 

 

 

 

 

 

 

 

实践10:使用SQL Server数据库的用户字定义函数

(1)      编写函数,按男、女雇员分类计算平均工资和合计工资

(2)      编写函数,查找雇员表EmployeesSexPhone与指定值相匹配的雇员

(3)      编写函数,查找雇员表EmployeesBirthDate在指定两个日期之间的雇员

(4)      定义数据类型mytext,向雇员表Employees中添加列Remark,其类型为mytext

你可能感兴趣的:(sqlserver2k)