找考题网-背景图
问答题

在SQLServer 2000的某数据库中有如下两张关系表:
学生表(学号,姓名,性别,系号),学号为主码
系表(系号,系名,系简称),系号为主码
①在数据库中执行如下Transact—SQL代码:
DECLARE @ DeptID varchar (10)
DECLARE @cnt int
set @cnt=0
DECLARE cursor1 cursor FOR SELECT 系号 FROM 系表
WHERE 系名 LIKE ’%电%’
OPEN cursor1
FETCH NEXT FROM cursor1 INTO @DeptID
WHILE@ @FETCH_STATUS= 0
BEGIN
DECLARE @temp_cnt int
SELECT @temp_cnt=COUNT(*) FROM 学生表 WHERE系号=@DeptID
set @cnt=@cnt+@temp cnt
FETCH NEXT FROM cursor1 INTO @DeptID
END
CLOSE cursor1
DEALLOCATE cursor1
SELECT @cnt
执行过程中发现速度比较慢,为了解决性能问题,需在功能不变的情况下,将此Transact-SQL代码改为一条SQL语句,请写出此SQL语句(语句中不能含有子查询)并说明为什么此种修改可以提高性能。
②设在学生表的(姓名,系号)列上建有一个复合索引,该索引是否有助于提高下列两个语句的查询效率并说明原因。
SELECT*FROM学生表WHERE系号=’1’;
SELECT*FROM学生表WHERE姓名=’张三’;

【参考答案】

①Select count(*)from学生表,系表where学生表.系号=系表.系号and系名like’%电%’
性能更好的原因:Transact-SQL的代码需要先扫描一遍系表,然后根据扫描得到的每个记录重新扫描一遍学生表得出结果。使用所写的SQL语句实现同样的功能,将两个表连接然后按......

(↓↓↓ 点击‘点击查看答案’看完整答案 ↓↓↓)
热门试题