习题参考答案
第一章
1、SQL Server 2000有七种不同的可用版本:企业版、企业评估版、标准版、开发版、个人版、Windows CE版和桌面引擎版。
2、Microsoft Windows NT Server 4.0、Microsoft Windows NT Server 4.0 企业版、Windows 2000 Server、Windows 2000 Advanced Server 和 Windows 2000 Data Center Server
第二章
1、C 2、A
3、Exec sp_addtype New_str,'Varchar(12)', 'Not Null '
第三章
1. 数据文件、事务日志、mdf、ldf。 2. CREATE DATABASE。 3. SP_HELPDB.
4. ALTER DATABASE.。
5. DBCC SHRINKFILE、DBCC SHRINKDATABASE。 6. SP_DBOPTION。 7. DROP DATABASE。 8. SP_DETACH。
9. 带FOR ATTACH子句的CREATE DATABASE语句。 10. CREATE TABLE。 11. ALTER TABLE。 12. DROP TABLE。 13. INSERT。 14. UPDATE。 15. DELETE。
16.约束定义了关于允许什么数据进入数据库的规则。约束有五种类型,分别是 PRIMARY KEY约束、FOREIGN KEY约束、UNION约束、CHECK约束、DEFAULT约束。约束的作用是防止列出现非法数据,以保证数据库中数据的一致性和完整性。
17.
(1) DELETE E2 FROM E2, E1
WHERE E2.编号 IN (SELECT 编号 FROM E1) (2) INSERT INTO E1 SELECT * FROM E2
18. UPDATE G1 SET G1.数量= G1.数量+ G2.数量 FROM G1, G2
1
WHERE G1.编号= G2.编号 GO
INSERT INTO G1
SELECT * FROM G2 WHERE NOT (G2.编号 IN (SELECT 编号 FROM G1))
第四章
1. A、B、D 2.B、C、D 3.
(1)程序为:SELECT top 6 * FROM goods
(2)程序为:SELECT 商品名称,进货价 FROM goods ORDER BY 进货价 DESC (3)程序为:SELECT 商品名称,零售价,进货价,剩余数量
FROM goods INNER JOIN sell ON goods.商品编号=sell.商品编号
(4)程序为:SELECT 商品编号,数量,零售价 FROM goods
COMPUTE AVG(零售价)
(5)程序为:SELECT 商品名称,goods.数量,售出时间 FROM goods,sell
WHERE 售出时间 between '2004.1.1'AND '2005.1.1' and goods.商品编号=sell.商品编号
(6)程序为:SELECT * FROM employees
WHERE 编号=ANY (SELECT 售货员工编号 FROM sell) SELECT 售货员工编号,商品编号,数量
FROM sell order by 售货员工编号 COMPUTE SUM(数量) BY 售货员工编号 (7)程序为:SELECT 商品名称,goods.数量,剩余数量 FROM goods,sell
WHERE goods.商品编号=sell.商品编号 and 商品名称 LIKE '%显示器%'
(8)程序为:SELECT SUM(sell.数量) as 打印机销售数量 FROM sell,goods
WHERE sell.商品编号=goods.商品编号 and 商品名称='打印机'
第五章
1. C 2. D
3.答:索引是一个单独的,物理的数据库结构。它由某个表中的一列或者若干列的值,以及这些值的记录在数据表中存储位置的物理地址所组成。使用索引可以极大的改善数据库的性能,加快数据查找速度。但是,索引也会消耗硬盘空间并招致开销和维护成本。
4.答:设置索引的原则是:在主键上创建索引;在经常需要检索的字段上创建索引;在外键上创建索引;在经常要排序的列上创建索引。
5.答:按照存储结构划分,索引分为聚集索引和非聚集索引。
在聚集索引中,表中各行的物理顺序与索引中行的物理顺序是相同,创建任何非聚集索引之前要首先创建聚集索引,聚集索引需要将表中的所有数据完全重新排列;而聚集索引不会改变表中数据行的物理存储位置和顺序,它只包含索引值和指向数据行的指
2
针。
6.答:数据完整性是指存储在数据库中的数据的一致性和准确性。数据完整性有3中类型:域完整性、实体完整性和参照完整性。
约束确保在数据中输入有效的数据值,是强制数据完整性的首选方法。
第六章
1. C 2. B 3.视图
4.对视图的定义进行加密
强制视图上执行的所有数据修改语句都必须符合由 select_statement 设置的准则。 5.判断题 √、×、√ 第7章
1、系统,用户 2、符号,运算符
3、B 4、B、C
5、批处理就是单个或多个Transact-SQL语句的集合,由应用程序一次性发送给SQL Server解释并执行批处理内的所有语句指令。批处理的结束标志是GO。建立批处理要注意:
(1) CREATE DEFAULT、CREATE RULE、CREATE VIEW、CREATE PROCEDURE、和CREATE TRIGGER语句,只能在单独的批处理中执行。
(2) 将默认值和规则绑定到表字段或用户自定义数据类型上之后,不能立即在同一个批处理中使用它们。
(3) 定义一个CHECK约束之后,不能立即在同一个批处理中使用这个约束。 (4) 修改表中的字段名之后,不能立即在同一个批处理中使用这个新字段名。 (5) 用户定义的局部变量的作用范围局限于一个批处理内,并且在CO命令后不能再引用这个变量。
(6) 如果一个批处理中的第一条语句是执行某存储过程的EXEC语句,则EXEC关键字可以省略不写;如果不是批处理的第一条语句,则EXEC关键字必须要有。
6、在使用局部变量以前,必须使用DECLARE语句来声明这个局部变量。语法格式为:DECLARE @局部变量名 数据类型[,…n]
给局部变量赋值有两种方法,可以使用SET语句赋值,也可以使用SELECT语句赋值。
使用SET语句赋值的语法格式为:SET @局部变量名=表达式[,…n]
使用SELECT语句赋值的语法格式为:SELECT @局部变量名=表达式[,…n] 7、使用游标要遵循以下顺序:
声明游标→打开游标→读取数据→关闭游标→删除游标
3
8、 DECLARE @srv varchar(20) SET @srv= @@servername PRINT @srv
9、DECLARE @Today DATETIME
SET @Today=GETDATE( )
SELECT YEAR(@Today) AS 年,MONTH(@Today) AS 月,DAY(@Today) AS 日 10、 USE STUINFO
GO
DECLARE @Stuname char(8) SET @Stuname ='张三'
IF EXISTS(SELECT * FROM t_student WHERE S_name=@stuname)
BEGIN
PRINT @stuname+'的信息如下:'
SELECT * FROM t_student WHERE S_name=@stuname END
ELSE
BEGIN
PRINT '在数据库中无此人信息!' END
GO
11、 USE STUINFO
GO
SELECT S_number, score,折合成绩=
CASE
WHEN score <60 THEN '不及格'
WHEN score >=60 AND score<70 THEN '及格' WHEN score >=70 AND score<80 THEN '中等' WHEN score >=80 AND score<90 THEN '良好' WHEN score >=90 THEN '优秀'
ELSE '无成绩' END
FROM t_score JOIN t_course ON t_score.C_number=t_course.C_number WHERE C_name='SQL Server程序设计' GO
12、 USE STUINFO
GO
--声明游标
DECLARE Stu_cursor CURSOR
FOR
4
SELECT * FROM t_student FOR READ ONLY --打开游标
OPEN Stu_cursor
--第一次读取,得到结果集的首行记录 FETCH NEXT FROM Stu_cursor --循环读取结果集中剩余的数据行 WHILE @@FETCH_STATUS=0 BEGIN
FETCH NEXT FROM Stu_cursor END
--关闭游标
CLOSE Stu_cursor --释放(删除)游标
DEALLOCATE Stu_cursor GO
13、 USE STUINFO
GO
DECLARE @score real --声明一个可更新的游标
DECLARE Stu_score CURSOR KEYSET FOR SELECT score FROM t_score
WHERE S_number= '2004016' AND C_number= '001'
FOR UPDATE OPEN Stu_score
FETCH ABSOLUTE 1 FROM Stu_score INTO @score
PRINT '修改前的成绩是:'+CONVERT(Varchar(6),@score) --通过游标修改数据 UPDATE t_score SET score= score+5
WHERE CURRENT OF Stu_score
FETCH ABSOLUTE 1 FROM Stu_score INTO @score
PRINT '修改后的成绩是:'+CONVERT(Varchar(6),@score) --关闭游标
CLOSE Stu_score --释放(删除)游标
DEALLOCATE Stu_score GO
5