zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    算法初步——哈希表B.1038统计同成绩学生
    算法初步——哈希表B10133.旧键盘打字 (注意bool型数组的赋值为true的方法)
    算法初步——哈希表B1029/A1084. 旧键盘
    算法初步——排序 A1012.The Best Rank(25)
    《思维导图》——东尼博赞
    算法初步——排序B1015/A1062.德才论
    入门模拟——(字符串处理)A1001. A+B Format(20)
    RMQ问题(线段树+ST算法)
    PKU 2406 Power Strings(KMP最长循环不重叠字串)
    KMP算法 kuangbin
  • 原文地址:https://www.cnblogs.com/tangge/p/2649836.html
Copyright © 2011-2022 走看看