SQL - 15.变量和流程控制

局部变量_先声明再赋值

 

声明局部变量

DECLARE @变量名  数据类型
    DECLARE @bookName varchar(20)
    DECLARE @bId int

赋值

SET @变量名 =--set用于普通的赋值
SELECT @变量名 = --用于从表中查询数据并赋值

 

例:

image

declare @mo money --声明变量
select @mo=b_money from Book where b_title='.NETMVC3' --赋值 @mo=57.00
select * from Book where b_money<@mo --使用变量

 image

 

变量分为:
     局部变量:
          局部变量必须以标记@作为前缀 ,如@Age int
          局部变量:先声明,再赋值 
     全局变量(系统变量):
          全局变量必须以标记@@作为前缀,如@@version
          全局变量由系统定义和维护,我们只能读取,不能修改全局变量的值

image

 

IF ELSE

IF(条件表达式)

  BEGIN --相当于C#里的{

    语句1 ……

  END --相当于C#里的}

ELSE

  BEGIN

    语句1

    ……

  END

image

 

 

 

例:

image

 

 

 

问题:
统计并显示所有书籍价格(b_money) 的平均值,如果平均价格在50以上,显示“A“,并显示平均价格最高的2本书;如果在50以下,显示“B“,并显示平均价格最少的2本书。

分析:
第一步,统计平均价格存入临时变量;
第二步,用IF-ELSE判断;

declare @mon money
select @mon = AVG(b_money) from Book
select @mon 平均价 
if @mon >=50
begin 
select 'A' 大于等于50
select top 2 * from Book order by b_money desc
end
else
begin
select 'B' 小于50
select top 2 * from Book order by b_money asc
end

 image

 

WHILE循环

WHILE(条件表达式)
  BEGIN --相当于C#里的{
    语句
    ……
    BREAK
  END --相当于C#里的}

image

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

例:

image

 

问题:

书籍价格上涨,确保每本书价格最少50元。提价:先每本都加2元,看是否都价格达标,如果没有全部达标,每本再加2元,再看是否都达标,如此反复提价,直到所有书都达标为止 。

分析:

第一步,统计没达标的本数 ;

第二步,如果有书没通过,提价;

第三步,循环判断。

declare @mon int
select @mon = COUNT(*) from book where b_money<50
select @mon 低于50的书数
while (@mon>0)
begin
    update book set b_money=b_money+2
    select @mon = COUNT(*) from book where b_money<50
end
select @mon 低于50的书数
select * from book

 image

另一种写法:

DECLARE @mon int
WHILE(1=1) --条件永远成立
  BEGIN
    SELECT @mon=COUNT(*) FROM Book 
            WHERE b_money<50    --统计不达标本数
    IF (@mon>0)
       UPDATE Book --每本加元
            SET b_money=b_money+2 
   ELSE
       BREAK    --退出循环(只有一行语句可省begin-end)
  END
SELECT * FROM Book

 

aaaa

posted @ 2012-08-21 21:37  【唐】三三  阅读(276)  评论(0编辑  收藏  举报