《数据库应用考试题目答案.pdf》由会员分享,可在线阅读,更多相关《数据库应用考试题目答案.pdf(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 1在安装在安装 SQL Server 2000SQL Server 2000 时,时,“仅客户端工具”“仅客户端工具”、“服务器和客户端工具”及“仅连接”等“服务器和客户端工具”及“仅连接”等安装定义有什么差别?安装定义有什么差别?答:仅客户端工具:仅安装客户端关系数据库管理工具。此选项包含管理 SQL Server 的客户端工具和客户端连接组件。服务器和客户端工具:执行安装服务器和客户端工具以创建具有管理能力的关系数据库服务器。仅连接:仅安装关系数据库客户端连接组件,包括连接 SQL Server 2000 命名实例所需的 MDAC 2.6(Microsoft 数据访问组件)。该选项只提
2、供连接工具,不提供客户端工具或其它组件。2 2一个数据库中包含哪几种文件?一个数据库中包含哪几种文件?答:主数据库文件:用来存储数据库的启动信息以及部分或者全部数据,是所有数据库文件的起点,包含指向其它数据库文件的指针。一个数据库只能有一个主数据库文件。辅助数据库文件:用于存储主数据库文件中未存储的剩余数据和数据库对象,一个数据库可以没有辅助数据库文件,但也可以同时拥有多个辅助数据库文件事务日志文件:一个存储数据库的更新情况等事务日志信息,当数据库损坏时,管理员使用事务日志恢复数据库;每一个数据库至少必须拥有一个事务日志文件,而且允许拥有多个日志文件。3 3事务文件和数据文件分开存放有什么好处
3、?事务文件和数据文件分开存放有什么好处?答:因为利用事务日志备份可以将数据库恢复到特定的即时点(如输入不想要的数据之前的那一点)或故障发生点。在媒体恢复策略中应考虑利用事务日志备份。4 4什么是批处理?使用批处理有何限制?什么是批处理?使用批处理有何限制?答:包含一个或多个 T-SQL 语句的组,从应用程序将一次性发送到 SQL Server 执行,SQLServer 批处理语句作为整体编译成一个可执行单元。限制:如不能够在同一个批处理中更改表,然后引用新列。如在一个批处理程序中,有两条语句。第一条语句用来在一张表中插入一个字段,如在 User 表中插入员工的出生年月;第二条语句则用来引用这个
4、列,如根据身份证号码来推算出这个员工的出身年月并把这个值赋值给这个第一条语句创建的出身年月字段。5 5数据检索时,数据检索时,COMPUTECOMPUTE 和和 COMPUTE BYCOMPUTE BY 产生的结果有何不同?产生的结果有何不同?答:当 COMPUTE 带 BY 子句时,符合 SELECT 条件的每个组都有两个结果集:每个组的第一个结果集是明细行集,其中包含该组的选择列表信息。每个组的第二个结果集有一行,其中包含该组的 COMPUTE 子句中所指定的聚合函数的小计。当 COMPUTE 不带 BY 子句时,SELECT 语句有两个结果集:每个组的第一个结果集是包含选择列表信息的所有
5、明细行。第二个结果集有一行,其中包含 COMPUTE 子句中所指定的聚合函数的合计。6 6什么是索引?索引分为哪两种?各有什么特点?什么是索引?索引分为哪两种?各有什么特点?答:数据库中的索引与书籍中的目录类似。在一本书中,利用目录可以快速查找所需信息,无须阅读整本书。在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据。聚集索引和非聚集索引。聚集索引的特点:行的物理位置和行在索引中的位置是相同的,每个表只能有一个聚集索引,聚集索引的平均大小大约为表大小的 5%左右。非聚集索引特点:若未指定索引类型,则默认为非聚集索引,叶节点页的次序和表的物理存储次序不同,每个表最多可以
6、有 249 个非聚集索引,在非聚集索引创建之前创建聚集索引。7 7创建索引有什么优点和缺点?创建索引有什么优点和缺点?答:优点:索引在数据库中的作用类似于目录在书籍中的作用,用来提高查找信息的速度。使用索引查找数据,无需对整表进行扫描,可以快速找到所需数据。缺点:索引需要占用数据表以外的物理存储空间。创建索引和维护索引要花费一定的时间。当对表进行更新操作时,索引需要被重建,这样降低了数据的维护速度。8 8什么是视图?使用视图的优点和缺点是什么?什么是视图?使用视图的优点和缺点是什么?答:视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据
7、库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。优点:隐蔽数据库的复杂性;控制用户提取数据;简化数据库用户管理;简化查询缺点:性能:SQL Server 必须把视图的查询转化成对基本表的查询,如果这个视图是由,一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,SQL Server 也,把它变成一个复杂的结合体,需要花费一定的时间。修改限制:当用户试图修改视图的某些行时,SQL Server 必须把它转化为对基本,表的某些行的修改。对于简单视图来说,这是很方便的,但是,对于比较复杂的,视图,可能是不可修改的。9.9.修改视图中的数据会受到
8、哪些限制?修改视图中的数据会受到哪些限制?答:必须对视图的操作权限有权限对视图上的某些列不能修改,这些列是:计算列,内置函数列和行集合函数列删除基表并不删除视图,建议采用与表明显不同的名字命名规则对由多表连接成的视图修改数据时,不能同时影响一个以上的基表,也不能删除视图中的数据如果某些列因为规则或者约束的限制不能接受从视图插入的数据时,则插入数据可能会失败对具有 NOT NULL 的列进行修改时可能会出错。通过视图修改或者插入数据时,必须保证未显示的具有 NOT NULL 属性的列有值,可以是默认值,IDENTITY 等,否则不能像视图中插入数据行。10.10.什么是数据完整性?如果数据库不实
9、施数据完整性会产生什么结果?什么是数据完整性?如果数据库不实施数据完整性会产生什么结果?答:指的是数据库中存储的数据的一致性和准确性;包括了实体完整性、域完整性、参照完整性、用户定义的完整性。能够防止数据库中存在不符合语义规定的数据,并且可以防止因错误信息的输入输出造成无效操作或错误信息。后果:无法保证数据库数据的一致性和准确性;容易造成数据库中存在不符合规定的数据或者错误信息1111数据完整性有哪几类?如何实施?数据完整性有哪几类?如何实施?答:数据完整性分为四类:实体完整性、域完整性、参照完整性、用户定义的完整性。数据库采用多种方法来保证数据完整性,包括外键、束约、规则和触发器。系统很好地
10、处理了这四者的关系,并针对不同的具体情况用不同的方法进行,相互交叉使用,相补缺点。12.12.什么是主键约束?什么是惟一约束?两者有什么区别?什么是主键约束?什么是惟一约束?两者有什么区别?答:主键约束:有一列或列的组合,其值能唯一的标识表中的每一行。唯一约束:不允许数据库表在指定列上具有相同的值,但允许有空值。区别:一个表可以定义多个唯一约束,只能定义一个主键约束;空值得列上可以定义唯一约束,不能定义主键约束。1313什么是外键,怎样建立外键约束?什么是外键,怎样建立外键约束?答:外键是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两
11、个表之间的链接。这个列就成为第二个表的外键。1414什么是存储过程?使用存储过程有什么好处?什么是存储过程?使用存储过程有什么好处?答:定义:存储过程指的是存储在服务器上的 Transact-SQL 语句的命名集合,是封装重复性任务的方法,支持用户声明变量、条件执行以及其他强有力的编程特性。好处:存储过程封装了商务逻辑,确保一致的数据访问和修改。若规则或策略有变化,则只需要修改服务器上的存储过程,所有的客户端就可以直接使用屏蔽数据库模式的详细资料。用户不需要访问底层的数据库和数据库内的对象提供了安全性机制。用户可以被赋予执行存储过程的权限,而不必在存储过程引用的所有对象上都有权限改善性能。预编
12、译的 Transact-SQL 语句,可以根据条件决定执行哪一部分减少网络通信量。客户端用一条语句调用存储过程,就可以完成可能需要大量语句才能完成的任务,这样减少了客户端和服务器之间的请求/回答包1515什么是触发器?触发器分有什么作用?什么是触发器?触发器分有什么作用?答:触发器是一类特殊的存储过程,不能被直接调用,也不传递或接受参数作用:维护不可能在表创建时刻通过声明性约束进行的复杂的完整性约束限制。通过记录所进行的修改以及谁进行了修改来审计表中的信息。当表被修改的时候,自动给其他需要执行操作的程序发信号。程序设计题假设在 factory 数据库中已创建了如下 3 个表,(1)职工表 wo
13、rker,其结构为:职工号:int,姓名:char(8),性别:char(2),出生日期:datetime,党员否:bit,参加工作:datetime,部门号:int。(2)部门表 depart,其结构为:部门号:int,部门名:char(10)。(3)职工工资表 salary,其结构为:职工号:int,姓名:char(8),日期:datetime,工资:decimal(6,1)。1.使用 Transact-SQL 语句完成如下各题:(1)显示所有职工的年龄。(2)求出各部门的党员人数。(3)显示所有职工的姓名和 2004 年 1 月份工资数。(4)显示所有职工的职工号、姓名和平均工资。(5)
14、显示所有职工的职工号、姓名、部门名和 2004 年 2 月份工资,并按部门名顺序排列。(6)显示各部门名和该部门的所有职工平均工资。(7)显示所有平均工资高于 1200 的部门名和对应的平均工资。(8)显示所有职工的职工号、姓名和部门类型,其中财务处和人事处属管理部门,市场部属市场部门。答案:(1)SELECT 姓名,YEAR(GETDATE()-YEAR(出生日期)AS 年龄 FROM worker(2)SELECT depart.部门名,count(*)AS 党员人数FROM worker,departWHERE worker.党员否=1 AND worker.部门号=depart.部门号
15、GROUP BY depart.部门名(3)SELECT worker.姓名,salary.工资 FROM worker,salary WHERE worker.职工号=salary.职工号 AND YEAR(salary.日期)=2004 AND MONTH(salary.日期)=1(4).SELECT 职工号,AVG(工资)AS 平均工资FROM salaryGROUP BY 职工号(5)SELECT worker.职工号,worker.姓名,depart.部门名,salary.工资 AS 2004 年 2月工资FROM worker,depart,salaryWHERE worker.部
16、门号=depart.部门号 AND worker.职工号=salary.职工号 AND YEAR(salary.日期)=2004 AND MONTH(salary.日期)=2ORDER BY worker.部门号(6)SELECT depart.部门名,AVG(salary.工资)AS 平均工资FROM worker,depart,salaryWHERE worker.部门号=depart.部门号 AND worker.职工号=salary.职工号GROUP BY depart.部门名(7)SELECT depart.部门名,AVG(salary.工资)AS 平均工资FROM worker,d
17、epart,salaryWHERE worker.部门号=depart.部门号 AND worker.职工号=salary.职工号GROUP BY depart.部门名HAVING AVG(salary.工资)1200(8).USE factory GO SELECT worker.职工号,worker.姓名CASE depart.部门名 WHEN 财务处 THEN 管理部门WHEN 人事处 THEN 管理部门WHEN 市场部 THEN 市场部门END AS 部门类型FROM worker,depart WHERE worker.部门号=depart.部门号GO2在前面建立的 factory
18、数据库上,用 Transact-SQL 语句完成下列各题:(1)在 worker 表中的“部门号”列上创建一个非聚集索引,若该索引已存在,则删除后重建。(2)在 salary 表的“职工号”和“日期”列创建聚集索引,并且强制惟一性。答案:(1)SET NOCOUNT OFF USE factory IF EXISTS(SELECT name FROM sysindexes WHERE name=depno DROP INDEX worker.depno GO CREATE INDEX depno ON worker(部门号)GO(2)SET NOCOUNT OFF USE factory IF
19、 EXISTS(SELECT name FROM sysindexes WHERE name=no_date DROP INDEX salary.no_date GO CREATE UNIQUE CLUSTERED INDEX no_date ON salary(职工号,日期)GO3在前面建立的 factory 数据库上,用 Transact-SQL 语句完成下列各题:(1)建立视图 View1,查询所有职工的职工号、姓名、部门名和 2004 年 2 月份工资,并按部门名顺序排列。(2)建立视图 View2,查询所有职工的职工号、姓名和平均工资。(3)建立视图 View3,查询各部门名和该部门
20、所有职工平均工资。(4)显示视图 View3 的定义答案:(1)USE factory GO IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME=View1)DROP VIEW View1 GO CREATE VIEW View1 AS SELECT TOP 15 worker.职工号,worker.姓名,depart.部门名,salary.工资 AS 2004 年 2 月工资 FROM worker,depart,salary WHERE worker.部门号=depart.部门号 AND wo
21、rker.职工号=salary.职工号 AND YEAR(salary.日期)=2004 AND MONTH(salary.日期)=2 ORDER BY worker.部门号 GO SELECT*FROM View1 GO(2)USE factory GO IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME=View2)DROP VIEW View2 GO CREATE VIEW View2 AS SELECT worker.职工号,worker.姓名,AVG(salary.工资)AS 平均工资
22、FROM worker,salary WHERE worker.职工号=salary.职工号 GROUP BY worker.职工号,worker.姓名 GO SELECT*FROM View2 GO(3)USE factory GO IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME=View3)DROP VIEW View3 GO CREATE VIEW View3 AS SELECT depart.部门名,AVG(salary.工资)AS 平均工资 FROM worker,depart,sa
23、lary WHERE worker.部门号=depart.部门号 AND worker.职工号=salary.职工号 GROUP BY depart.部门名 GO SELECT*FROM View3 GO(4)USE factory GO EXEC sp_helptext View3 GO4在前面建立的 factory 数据库上,用 Transact-SQL 语句完成下列各题:(1)实施 worker 表的“性别”字段默认值为“男”的约束。(2)实施 salary 表的“工资”字段值限定在 09999 的约束。(3)实施 depart 表的“部门号”字段值惟一的非聚集索引的约束。(4)为 wo
24、rker 表建立外键“部门号”,参考表 depart 的“部门号”列。(5)建立一个规则 sex:性别=男 OR 性别=女,将其绑定到 worker 表的“性别”列上。(6)删除(1)小题所建立的约束。(7)解除(5)小题所建立的绑定并删除规则 sex。答案:(1)ALTER TABLE worker ADD CONSTRAINT default_sex DEFAULT 男 FOR 性别(2)ALTER TABLE salary ADD CONSTRAINT check_salary CHECK(工资0 AND 工资9999)(3)ALTER TABLE depart ADD CONSTRAI
25、NT unique_depart UNIQUE NONCLUSTERED(部门号)(4)ALTER TABLE worker ADD CONSTRAINT FK_worker_no FOREIGN KEY(部门号)REFERENCES depart(部门号)(5)CREATE RULE sex AS 性别=男 OR 性别=女 EXEC sp_bindrule sex,worker.性别(6)ALTER TABLE worker DROP CONSTRAINT default_sex(7)EXEC sp_unbindrule worker.性别 DROP RULE sex5在前面建立的 fact
26、ory 数据库上,用 Transact-SQL 语句完成下列各题:(1)创建一个为 worker 表添加职工记录的存储过程 Addworker。(2)创建一个存储过程 Delworker 删除 worker 表中指定职工号的记录。(3)显示存储过程 Delworker。(4)删除存储过程 Addworker 和 Delworker。答案:(1)USE factory GO CREATE PROCEDURE Addworker no int=NULL,name char(10)=NULL,sex char(2)=NULL,birthday datetime=NULL,na bit=NULL,wt
27、ime datetime=NULL,depno int=NULL AS IF no IS NULL OR name IS NULL OR sex IS NULL OR birthday IS NULL OR depnoIS NULL BEGIN PRINT 请重新输入该职工信息!PRINT 你必须提供职工号、姓名、性别、出生日期、部门号 RETURN END BEGIN TRANSACTION INSERT INTO worker VALUES(no,name,sex,birthday,na,wtime,depno)IF error0 BEGIN ROLLBACK TRAN RETURN EN
28、D COMMIT TRANSACTION PRINT 职工+name+的信息成功添加到表 worker 中执行下列语句,可验证存储过程的正确性:USE factory GO Addwoeker 20,陈立,女,55/03/08,1,75/10/10,4 GO SELECT*FROM worker GO(2)USE factory GO CREATE PROCEDURE Delworker no int=NULL AS IF no IS NULL BEGIN PRINT 必须输入职工号!RETURN END BEGIN TRANSACTION DELETE FROM worker WHERE 职
29、工号=no IF error0 BEGIN ROLLBACK TRAN RETURN END COMMIT TRANSACTION PRINT 成功删除职工号为+CAST(no AS CHAR(2)+的职工记录执行下列语句,可验证存储过程的正确性:USE factory GO Delwoeker 20 GO SELECT*FROM worker GO(3)USE factory GO EXEC sp_helptext Delworker GO(4)USE factory GO IF EXISTS(SELECT name FROM sysobjects WHERE name=Addworker
30、AND type=P DROP PROCEDURE Addworker GO IF EXISTS(SELECT name FROM sysobjects WHERE name=Delworker AND type=P DROP PROCEDURE Delworker GO6在前面建立的 factory 数据库上,用 Transact-SQL 语句完成下列各题:(1)在表 depart 上创建一个触发器 depart_update,当更改部门号时同步更改 worker 表中对应的部门号。(2)在表 worker 上创建一个触发器 worker_delete,当删除职工记录时同步删除 salary
31、 表中对应职工的工资记录。(3)删除触发器 depart_update。答案:(1)USE factory GO IF EXISTS(SELECT name FROM sysobjects WHERE type=TR AND name=depart_update DROP TRIGGER depart_update GO CREATE TRIGGER depart_update ON depart FOR UPDATE AS DECLARE olddepno int,newdepno int SELECT olddepno=部门号 FROM deleted SELECT newdepno=部门
32、号 FROM inserted UPDATE worker SET 部门号=newdepno WHERE 部门号=olddepno GO(2)USE factory GO IF EXISTS(SELECT name FROM sysobjects WHERE type=TR AND name=worker_delete DROP TRIGGER worker_delete GO CREATE TRIGGER worker_delete ON worker FOR DELETE AS DECLARE no int SELECT no=职工号 FROM deleted DELETE FROM sa
33、lary WHERE 职工号=no GO(3)USE factory GO DROP TRIGGER depart_update GO-use mastergoxp_cmdshell mkdir d:project,NO_OUTPUT -创建文件夹 project,xp_cmdshell 为系统存储过程-检验数据库是否存在,如果为真,删除此数据库-IF EXISTS(SELECT NAME FROM master.dbo.SYSDATABASES WHERE NAME=NstuDB)DROP DATABASE stuDBGO-创建数据库-CREATE DATABASE stuDBON(NAME
34、=NstuDB,FILENAME=d:projectstuDB.mdf,SIZE=5mb,MAXSIZE=10mb,FILEGROWTH=15%)LOG ON(NAME=NstuDB_log,FILENAME=d:projectstuDB_log.ldf,SIZE=2mb,MAXSIZE=4mb,FILEGROWTH=15%)GOUSE stuDB-判断此表是否存在,如果为存在,删除此表-IF EXISTS(SELECT NAME FROM stuDB.dbo.SYSOBJECTS WHERE NAME=NstuInfo)DROP TABLE stuInfoGO-创建主表 stuInfo-CR
35、EATE TABLE stuInfo(stuName NVARCHAR(20)NOT NULL,stuNo NCHAR(6)NOT NULL,stuSex NCHAR(4)NOT NULL,stuAge SMALLINT NOT NULL,stuSeat SMALLINT IDENTITY(1,1),stuAddress NTEXT)GO-为主表 stuInfo 创建约束-ALTER TABLE stuInfo ADD CONSTRAINT PK_stuNo PRIMARY KEY(stuNo),CONSTRAINT CK_stuNo CHECK(stuNo LIKE S2530-90-9),
36、CONSTRAINT CK_stuSex CHECK(stuSex=男 OR stuSex=女),CONSTRAINT CK_stuAge CHECK(stuAge BETWEEN 15 AND 40),CONSTRAINT CK_stuSeat CHECK(stuSeat 0 ORLabExam 0)-查询该次考试有多少学员参加,重复的不统计SELECT COUNT(DISTINCT stuNo)AS 考 试 没 有 通 过 的 学 员 FROM stuMarks WHERE(writtenExam 60 OR LabExam 60)-查询该次考试有多少学员没通过(笔试或机试小于 60 分)
37、创建数据库创建数据库CREATE DATABASE SampleON PRIMARY(NAME=SampleData,【逻辑文件名】FILENAME【文件物理名】=c:Program Files.DataSample.mdf,【主数据库文件】SIZE=10MB,MAXSIZE=15MB,FILEGROWTH=20%)LOG ON (NAME=SampleLog,FILENAME=c:Program Files.DataSample.ldf,【事务日志文件】SIZE=3MB,MAXSIZE=5MB,FILEGROWTH=1MB)【文件增长量】创建文件组创建文件组ALTER DATABASE No
38、rthwindADD FILEGROUP OrderHistoryGroupGOALTER DATABASE NorthwindADD FILE(NAME=OrdHistYear1,FILENAME=c:HistoryDB OrdHist1.ndf,SIZE=5MB)TO FILEGROUP OrderHistoryGroupGO管理数据库管理数据库add file,n to filegroup filegroupname:表示向指定的文件组中添加新的数据文件。add log file,n:增加新的日志文件。remove file logical_file_name:删除指定的操作系统文件。r
39、emove filegroup filegroup_name:删除指定的文件组。modify file:修改某个操作系统文件。modify name=new_databasename:重命名数据库。add filegroup filegroup_name:增加一个文件组。modify filegroup filegroup_name:修改某个指定文件组的属性。例子例子:ALTER DATABASE Sample-修改数据库 MODIFY FILE(NAME=SampleLog,SIZE=15MB)GOALTER DATABASE Sample-使文件自动增长ADD FILE (NAME=Sam
40、pleData2,FILENAME=c:Program Files.DataSample2.ndf,SIZE=15MB,MAXSIZE=20MB)GODROP DATABASE Northwind,pubs-删除数据库创建用户定义的数据类型:EXEC sp_addtype city,varchar(20),NULLEXEC sp_addtype region,varchar(20),NULLEXEC sp_addtype country,varchar(40),NULL删除用户定义的数据类型:EXEC sp_droptype cityEXEC sp_droptype regionEXEC sp
41、_droptype country添加 删除列ALTER TABLE XSADD奖学金等级 tinyint NULLGOALTER TABLE XSALTER COLUMN 姓名 char(10)ALTER COLUMN 出身时间 datetimeGO删除列语法:ALTER TABLE表名 DROP COLUMN列名,n生成列CREATE TABLE Customer(CustID uniqueidentifier NOT NULL DEFAULT NEWID(),CustName char(30)NOT NULL)数据定义语言(DDL)语句-create-create 语句语句USE nor
42、thwindCREATE TABLE customer(cust_id int,company varchar(40),contact varchar(30),phone char(12)GO-alter-alter 语句语句Alter table customerAdd address varchar(20)-drop-drop 语句语句Drop table customer数据控制语言(DCL)语句设置或更改权限GRANT允许一个用户能够访问数据或运行某些 Transact-SQL 语句DENY剥夺某个安全账户的访问许可并阻止某个用户、用户组或角色成员继承原有的权限REVOKE删除一个以前授于或拒绝的许可数据操作语言(DML)语句使用 DML 更改数据库中的数据或查询数据库的信息SELECTINSERTUPDATEDELETE