《数据库原理与应用》习题集

发布时间 : 星期三 文章《数据库原理与应用》习题集更新完毕开始阅读

dbo.books ON dbo.borrowinf.图书编号=dbo.books.编号 INNER JOIN dbo.readertype ON dbo.readers.读者类型=dbo.readertype.类型编号 WHERE dbo.readertype.类型名称='教师'

(3) 自定义一个函数fun1,该函数的返回值为表books中最便宜的书价。 答:(3) CREATE FUNCTION fun1()

RETURNS float AS BEGIN

DECLARE @p float SELECT @p=MIN(定价) FROM dbo.books RETURN @p END

(4) 自定义一个函数fun2,以图书的名称为参数,返回该书的价格。并使用该函数查看《计算机文化基础》的价格。

答:(4) CREATE FUNCTION fun2(@b char(20))

RETURNS float AS BEGIN

DECLARE @p float

SELECT @p=定价 FROM books WHERE 书名=@b RETURN @p END

在查询分析器中执行:SELECT dbo.fun2('计算机文化基础') 或 PRINT dbo.fun2('计算机文化基础')

(5) 自定义一个函数fun3,以读者的编号为参数,返回该读者所借的书的名称及借期还期。

答:(5) CREATE FUNCTION fun3(@bh char(8))

RETURNS table AS RETURN

( SELECT dbo.books.书名, dbo.borrowinf.借期, dbo.borrowinf.还期 FROM dbo.books INNER JOIN

dbo.borrowinf ON dbo.books.编号 = dbo.borrowinf.图书编号 WHERE dbo.borrowinf.读者编号 =@bh )

在查询分析器中执行:SELECT * FROM dbo.fun3('20040628')

(6) 创建一个存储过程pro1,该存储过程用来查找表Books中最便宜的书价。 答:(6) CREATE PROCEDURE pro1

AS

SELECT MIN(定价) FROM dbo.books GO

在查询分析器中执行:EXECUTE PRO1

(7) 创建一个存储过程pro2,用来查询书的价格,该存储过程带一输入参数和一输出参数,输入参数用来输入图书的名称,输出参数用来返回该书的价格。 答:(7) CREATE PROCEDURE pro2

@b CHAR(20), @p FLOAT OUTPUT AS

SELECT @p=定价 FROM books WHERE 书名=@b GO

在查询分析器中执行: DECLARE @price FLOAT

EXECUTE pro2 '计算机文化基础',@price output SELECT @price

(8) 创建一个存储过程pro3,用来查询指定读者的借阅情况,该存储过程带一输入参数,用来输入读者的编号,执行该存储过程可以查询到该读者的姓名及所借的书的名称和借期还期。

答:8) CREATE PROCEDURE PRO3

@name CHAR(10) AS

SELECT dbo.readers.姓名,dbo.books.书名, dbo.borrowinf.借期, dbo.borrowinf.还期 FROM dbo.borrowinf INNER JOIN

dbo.readers ON dbo.borrowinf.读者编号=dbo.readers.编号 INNER JOIN dbo.books ON dbo.borrowinf.图书编号=dbo.books.编号 WHERE dbo.borrowinf.读者编号=@name GO

(9) 在books表中建立UPDATE 触发器tr1,若更新了books表中的图书编号,则相应更新borrowinf表的图书编号。

答:(9) CREATE TRIGGER tr1 ON [dbo].[books]

FOR UPDATE AS

DECLARE @old CHAR(15),@new CHAR(15) SELECT @old=编号 FROM deleted SELECT @new=编号 FROM inserted

UPDATE borrowinf SET 图书编号=@new WHERE 图书编号=@old

(10) 在readers表中建立DELETE触发器tr2,当删除readers表中的记录时,若borrowinf表中有相应的借阅记录,则不允许删除该记录。

答:(10)CREATE TRIGGER TR2 ON [dbo].[readers]

FOR delete AS

IF @@ROWCOUNT=0 RETURN

IF EXISTS(SELECT * FROM deleted inner join borrowinf on deleted.编号=borrowinf.读者编号) ROLLBACK

(11) 在borrowinf表中建立INSERT触发器tr3,若某位读者当天借的书已超过5本,则不允许再借了。

答:(11)CREATE TRIGGER TR3 ON [dbo].[borrowinf]

FOR INSERT AS

DECLARE @num INT

SELECT @num=COUNT(*)

FROM inserted inner join borrowinf on inserted.读者编号=borrowinf.读者编号 WHERE year(borrowinf.借期)=year(getdate()) and month(borrowinf.借期)=month(getdate()) and day(borrowinf.借期)=day(getdate()) GROUP BY inserted.读者编号 IF @num>5 ROLLBACK 或者

CREATE TRIGGER TR3 ON [dbo].[borrowinf] FOR INSERT AS

DECLARE @rno CHAR(8) DECLARE @num INT

SELECT @rno=读者编号 FROM inserted SELECT @num=COUNT(*) FROM borrowinf

WHERE borrowinf.读者编号=@rno

and year(borrowinf.借期)=year(getdate()) and month(borrowinf.借期)=month(getdate()) and day(borrowinf.借期)=day(getdate()) GROUP BY读者编号 IF @num>5 ROLLBACK

第8章 数据库完整性及SQL Server的完整性控制 一、多选题

1. 数据的完整性是指数据的( )。

A.一致性 B.正确性 C.相容性 D.有效性 2. 在SQL Server中属于表级完整性约束的是( )。

A.实体完整性约束 B.域完整性约束 C.参照完整性约束 D.以上三者均是

3. 在SQL Server中实现数据完整性的主要方法有( )。 A.约束 B.默认 C.规则 D.触发器

4. 在SQL Server的数据完整性控制中属于声明数据完整性的是( )。 A.约束 B.默认 C.规则 D.触发器

5. 在SQL Server的数据完整性控制中属于过程数据完整性的是( )。 A.存储过程 B.默认 C.规则 D.触发器 6. 在SQL Server中,以下( )约束属于域完整性约束。

A.DEFAULT B.CHECK C.NULL D.FOREIGN KEY 7. 有关默认对象与默认约束的叙述中正确的是( )。

A.默认约束是嵌入到表的结构中,默认对象是独立于表的 B.删除表时默认约束与默认对象同时被删除 C.默认约束能实现的功能默认对象也能实现

D.一个默认对象可以绑定到多个列上 8. 有关规则的叙述中正确的是( )。

A.规则与默认对象一样,可以绑定到列上,也可以绑定到用户定义的数据类型上 B.在一列上只能使用一个规则 C.删除规则时,需先解除规则的绑定 D.同一列上若已CHECK约束,再绑定规则时,CHECK约束优先 9. 属性值约束主要有( )。

A.非空值约束 B. 基于元组的检查子句 C.域约束子句 D.默认 二、填空题

1. SQL Server 2000中的数据完整性包括( ) 、 ( )和参照完整性3种。 2. SQL Server使用声明数据完整性和( ) 两种方式实现数据完整性。

3. ( )完整性,它要求表中所有的元组都应该有一个惟一标识,即主关键字。可以使用( ) 约束实现实体完整性,也可以将( ) 约束和( ) 约束一起使用来实现实体完整性。

4.( ) 完整性维护从表中的外码与主表中主码的相容关系。

5. 为了保护数据库的实体完整性,当用户程序对主码进行更新使主码值不惟一时,DBMS就( )。 三、简答题

1. 简述SQL Server2000实现数据库完整性的方法。 答:主健、唯一健、检查、默认、外健约束。 2. 简述默认对象与默认约束的区别。 3. 简述规则与CHECK约束的区别。

4. 在数据库MyDB中创建名为reader_tp的默认,其值为3。将该默认绑定到表readers的列“读者类型”上。

5. 在数据库MyDB中创建名为borr_dt的规则,其限定条件为值不小于零。将该规则绑定到表readers的“已借数量”上。

联系合同范文客服:xxxxx#qq.com(#替换为@)