SQL游标

SQL游标

  1. 游标定义:用来操作查询的结果集,是一个用户数据缓冲区
    具体描述(光标):fetch
    优点:保存查询结果,以便以后使用。游标的结果集是select执行结果,需要的时候,只需一次,不用重复查询
    缺点:数据缓冲区,如果游标数据量大,则会造成内存不足,所以在数量小时才使用游标
    语法:游标名 cursor for select …
  2. 步骤:
    – 1.声明游标
    declare my_cursor cursor for select * from major
    – 2.打开游标
    open my_cursor
    – 3.取数据(循环)
    fetch next from my_cursor into
    – 4.关闭游标 或者 deallocate(释放游标)
  3. 案例
/* 查询mname */
declare my_cursor cursor for select mname from major
declare @mname varchar(20)
open my_cursor
fetch next from my_cursor into @mname
while @@FETCH_STATUS=0
begin
select @mname as 'mname'
fetch next from my_cursor into @mname
end
deallocate my_cursor

/* 对sc表添加等级列,若学生成绩80及以上等级A,70-79分为B,其余为C,null仍为null */
declare my_cursor1 cursor for select sno,cno,grade from sc
declare @sno varchar(20)
declare @cno varchar(10)
declare @grade decimal(5,2)
open my_cursor1
fetch next from my_cursor1 into @sno,@cno,@grade
while @@FETCH_STATUS=0
begin
  if @grade >=80
     update sc set sc_rank = 'A' where sno=@sno and cno=@cno
  else if @grade>=70
     update sc set sc_rank = 'B' where sno=@sno and cno=@cno
  else if @grade>=0
     update sc set sc_rank = 'C' where sno=@sno and cno=@cno
  fetch next from my_cursor1 into @sno,@cno,@grade
end
deallocate my_cursor1

select * from sc
/* 查询所有学生的专业名和姓名 */
-- 游标方法
declare my_cursor2 cursor for select sname,mname from stu left outer join major on stu.mno=major.mno
declare @sname varchar(30)
declare @mname varchar(20)
open my_cursor2
fetch next from my_cursor2 into @sname,@mname
while @@FETCH_STATUS=0
begin
  select @sname as 'sname',@mname as 'mname'
  fetch next from my_cursor2 into @sname,@mname
end
close my_cursor2

-- 左外连接
select * from stu
select sname,mname from stu left outer join major on stu.mno=major.mno
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值