二、填空题
1. SQL Server 2000与Windows 2000等操作系统完全集成,可以使用操作系统的用户名和域账号作为数据库的 注册账号 。(08年7月考)
2. SQL Server 2000 采用的结构化查询语言称为 Transaction-SQL 。
3. 常见的SQL Server2000的版本一般包括 企业版 、 标准版 、 个人版 、开发版和评
估版等。(08年7月考)(09年1月考)
4. SQL Server 2000服务管理器的主要作用是启动、 暂停 、 停止 服务器。 5. 安装SQL Server 2000时需要以本地 系统管理员 身份登录操作系统。
6. SQL Server主数据文件、次数据文件和事务日志文件默认的扩展名分别为 mdf 、
___ndf 和 ldf 。(09年1月考判断)
7. SQL Server 2000的数据库分为 系统数据库 和 用户数据库 两种类型。
8. 每个SQL Server 2000数据库下都包括 master 、 model 、 tempdb 和 msdb 四个系统数
据库。
9. SQL Server客户机传递到服务器上的一组完整的数据和SQL语句称为 批处理 。 10. 一般可以使用 Go 命令来标识Transact-SQL 批处理的结束。
11. varchar 数据类型可以自动去掉字段或变量尾部的 空格 以节省空间。(09年1月考判断) 12. 在一个已存在数据的表中增加不带默认值的列,一定要保证所增加的列允许 null 值。
(09年1月考判断)
13. 索引可以加速Select语句中order by 和 group by 选项的执行速度。(09年1月考判断) 14. 聚集索引与非聚集索引相比,查询速度要 快 。(08年1月考)
15. 单行或行尾注释的开始标记为_- - _,多行注释的开始标记为__/*_,结束标记为___
*/__。(08年1月考)
16. 局部变量的开始标记为 @ ,全局变量的开始标记为 @@ 。 09.7考判断 17. 每条__select___语句能够同时为多个变量赋值,每条__set__语句只能为一个变量赋值。(08年7月考)
18. 定义局部变量的语句关键字是 declare ,被定义的各变量之间必须用 逗号 字符分开。 19. 在SQL Server中,每个程序块的开始标记为关键字_being _,结束标记为关键字_end_。 20. 在SQL Server 2000中,CASE结构是一个 函数 ,只能作为一个 表达式 使用在另一
个语句中。(08年1月考)
21. 在SQL Server 2000中,CASE 函数具有 2 种格式,每种格式中可以带有 多 个WHEN
选项,可以带有 1 个ELSE选项。
22. 在条件结构的语句中,关键字IF和ELSE之间和ELSE之后,可以使用__单条__语句,
也可以使用具有_Being…end__格式的语句块。
23. 在循环结构的语句中,当执行到关键字 Break 后将终止整个语句的执行,当执行到
16
关键字 Continue 后将结束一次循环体的执行。
三、根据下面所给的AAA数据库,写出下列每条查询语句的执行结果,或者写出下列每条语句或程序段的功能。
假设存在名为AAA的数据库,包括Students(学号 char(8),姓名 varchar(8),年龄 int,专业 varchar(20),入学日期 DateTime)和Score(学号 char(8),课程名 varchar(10),成绩 numeric(5,2))两张表。
1. SELECT * FROM Students
WHERE DATEPART(year,入学日期)=datepart(year ,GETDATE()) 从Students表中查询出所有当年入学的学生记录 2. DECLARE @MyNO char(8) SET @MyNO=?20030001?
IF (SELECT 专业 from students WHERE 学号=@MyNO)=‘计算机软件’ Begin
Select AVG(成绩) AS 平均成绩 From scroe
Where 学号= @MyNO End Else
Print ?学号为?+@MyNO +?的学生号不存在或不属于软件专业? Go
首先定义一个名为@MyNo的局部变量,并给它赋初值,如果@MyNo属于计算机软件专业,则显示出平均成绩,否则显示“学生为@MyNo的学生不存在或不属于软件专业”。 3. declare @a numeric(5,2) (09.7考) set @a=(select avg(成绩) from score) select * from score where 成绩>=@a
从Score表中查询出大于等于平均成绩的所有记录。 4. declare @a numeric(5,2),@b numeric(5,2) (08年1月考) set @a=(select max(成绩) from score)
17
set @b=(select min(成绩) from score) print @a- @b
求出Score表中最高成绩与最低成绩的分数之差 5. declare @a char(6) set @a='刘亮'
if(exists(select * from students where 姓名=@a)) print '姓名为'+@a+'的同学存在!' else
print '姓名为'+@a+'的同学不存在!'
从Students表中查询出姓名为@a值的学生是否存在,根据不同情况显示出相应信息。 6. declare @a char(8) (08年7月考) set @a='计算机'
select 计算机专业人数=count(*)
from students
Where left(专业,3)= @a
从Students表中统计出专业名开头为@a的值的所有学生人数
7. select year(入学日期) as 入学年份,count(*) as 人数 from students
group by year(入学日期)
从Students表中分组统计出每个年份入学的学生人数
8. select month (入学日期) as 入学月份,count(*) as 人数 (09年1月考) from students
group by month (入学日期)
从Students表中分组统计出每个月份入学的学生人数 9. select day(入学日期) as 入学日号,count(*) as 人数 from students group by day(入学日期)
从Students表中分组统计出每个日号入学的学生人数 10. create procedure xxk1 (09.7考) as begin
select * from students x,score y Where x.学号 = y.学号 End
显示出AAA数据库中所有学生的记录信息及选课成绩 11.create procedure xxk2 (08年1月考)
18
as begin
select x.学号,x.姓名,x.专业,count(*) as 门数 from students x,score y where x.学号=y.学号 group by x.学号,x.姓名,x.专业 end
显示出AAA数据库中每个学生的学号、姓名、专业及选课门数。 12. create procedure xxk3 (08年7月考) as begin
select 学号,avg(成绩) as 平均成绩 from score group by 学号 end
显示出AAA数据库中每个学生的平均成绩
13.create procedure xxk4
( @a char(8),@b varchar(10),@c numeric(5,2) ) as begin update score set 成绩=@c
where 学号=@a and 课程名=@b end
修改Score表中学号为@a的值,课程名为@b的值的学生的成绩为@c的值。 14. create procedure xxk5(07年7月考)
( @a char(8),@b varchar(10),@c numeric(5,2) ) as begin update score insert into score values(@a,@b,@c) end
向Score表中插入学号为@a、课程名为@b、成绩为@c的学生成绩记录。 15.create procedure xxk6 (09年1月考)
19
( @a char(8), @b varchar(10) ) as begin
delete from score
where 学号= @a and 课程名= @b end
从Score表中删除学号为@a、课程名为@b的学生成绩记录。
20