神州数码招聘软件测试工程师一道SQL笔试题

前些日子,有学生参加了一次神州数码招聘软件测试工程师的笔试.其中有道SQL题目把他难住了.

 测试空间旗下大头针出品

题目如下:
写出一条Sql语句: 取出表A中第31到第40记录(SQLServer, 以自动增长的ID作为主键,  注意:ID可能不是连续的。)
其实这个题目到是不难,可能是有的学员不知道数据库里面有个游标机制罢了。
因为用SQL语句进行查询,最后的查询的结果都会返回一个结果集.不会返回一条一条的数据.而游标机智可以帮我们实现一条一条的得到数据.
 
废话多了直接看看下面一个简单的实现吧.
--创建了一个表,主键是job_id
DROP TABLE jobs
CREATE TABLE jobs
(
   job_id  smallint IDENTITY(1,2),
   job_name        varchar(50)     NOT NULL,
   PRIMARY KEY(job_id)
)
--循环插入了8条数据,只是模拟一下.
insert into jobs(job_name)
        values('tester1')
insert into jobs(job_name)
        values('tester2')
insert into jobs(job_name)
        values('tester3')
insert into jobs(job_name)
        values('tester4')
insert into jobs(job_name)
        values('tester5')
insert into jobs(job_name)
        values('tester6')
insert into jobs(job_name)
        values('tester7')
insert into jobs(job_name)
        values('tester8')
--查看插入后jobs表的内容
select * from jobs
 
--到此,准备工作作完了,当然这个不需要写到面试题里.
 
--下面是面试题目中应该写的.
--我选择显示第5,6,7条查询结果,不是31到40条,其实原理一样.

 

--声明三个局部变量

declare @job_id smallint
declare @job_name varchar(50)
declare @table_length smallint

--控制循环次数
set @table_length=5

--声明游标  其中scroll:随意移动游标  dynamic:读写游标 

declare sele_cursor cursor scroll dynamic for select * from jobs
--打开游标

open sele_cursor
--定位到第5条记录

fetch relative 5 from sele_cursor into @job_id,@job_name
--循环三次,输出5,6,7条记录

while(@table_length<=7)
begin
 select @job_id ,@job_name
 fetch next from sele_cursor into @job_id,@job_name
 set @table_length=@table_length+1
end

--关闭游标
close sele_cursor

--删除游标资源
deallocate sele_cursor
go

 

--最后的结果

 

 

你可能感兴趣的:(sql,软件测试,table,招聘,insert,jobs)