• SQL 编程


    用SQL编写程序首先我们要了解SQL的一些编程方法

    1.使用变量

    变量:是可以存储数据值的对象,可以使用局部变量向SQL语句专递数据.

    (1)局部变量

    T-SQL中,局部变量的名称必须以标记@作为前缀.

    声明局部变量的语法如下:

    语法

    declare @variable_name DateType

    其中,variable_name 为局部变量的名称,DateType为数据类型.

    例如:

    Declare @name varchar(8)

    Declare @number int

    局部变量的赋值有两种方法:使用SET语句和SELECT语句

    语法

    set @variable_name = value

    或者

    select @variable_name = value

    /*--查找张三的信息--*/
    declare @name varchar(8)
    set @name = '张三'
    select StudentNo, StudentName, BornDate,Address
    from Student 
    where Studentname = @name
    
    /*--查找与张三学号相邻的学生信息--*/
    declare @StudentNo int 
    --使用 select 赋值
    selece @StudentNo = StudentNo from Student
    where StudentName = @name
    select  StudentNo, StudentName, BornDate,Address
    from Student
    where (StudentNo = @StudentNo+1) or (StudentNo = @StudentNo-1)
    GO

    在T-SQL语言中,为局部变量赋值的语句有SET语句和SELECT语句

    下表是set语句和select语句的区别

      set select
    同时对多个变量赋值 不支持 支持
    表达式返回多个时 出错 将返回的最后一个值赋给变量
    表达式未返回值时 变量被赋值为null 变量保持原值
    下面代码体现了set语句和select语句在使用上不同.
    Declare @Addr nvarchar(100), @name nvarchar(100)
    
    Set @addr='', @name='张三'
    Select @addr='北京', @name='张三'
    
    set@addr = (select address from Student)
    Select @addrc = address from Student
    
    Set @addr = (Select address from Student where 1<0)
    --查询无结果时,@addr被赋值为null
    select @addr='北京'
    select @address = Address from Student where 1<0
    --查询无结果时,@addr保持原值  

     全局变量

    SQL Server 中的所有全局变量都使用两个@符号作为前缀

    最重要的五个全局变量

    变量 含义
    @@error 最后一个T-SQL错误的错误号
    @@identity 最后一次插入的标识值
    @@powcount 受上一个SQL语句影响的行数
    @@servername 本地服务器名称
    @@version SQL Server 版本信息

    输出语句

    语法

    print 局部变量或字符串

    select 局部变量as自定义列名

    print '服务器名称:' + @@servername
    print 'SQL Server的版本' +@@version
    select @@servername as '服务器名称'
    server @@version as  'SQL Server的版本'

    局部变量

    01.语法

    Declare @age int

    --赋值

    Set @age=20

    逻辑控制语句

    (1)begin-end语句

    语法

    begin

    语句或语句块

    end

    作用类似于C#中的 ‘{}‘

    (2)if-else语句

    语法

    if(条件)

    语句或语句块1

    else

    语句或语句块2

    declare @avg int
    select @avg= AVG(studentresult) from Result,Subject
    where  Result.SubjectId=Subject.SubjectId 
    and ExamDate>='2013-08-09' 
    and ExamDate<'2013-08-10'
    and Subject.SubjectName='oop'
    
    --02.判定:>=70  显示优秀,同时显示分数最高的三个人的分数
     if(@avg>=70)
     begin
      print '优秀'
       --显示前名成绩  当天  oop
       select top 3 * from Result,Subject
       where result.SubjectId=Subject.SubjectId
       and ExamDate>='2013-08-09'
        and ExamDate <'2013-08-10'
        and SubjectName='oop'
        --降序排列desc
        order by   StudentResult desc
        
      end
      else
      begin
        print '较差'
       --显示前名成绩  当天  oop
       select top 3 * from Result,Subject
       where result.SubjectId=Subject.SubjectId
       and ExamDate>='2013-08-09'
        and ExamDate <'2013-08-10'
        and SubjectName='oop'
        --降序排列desc
        order by   StudentResult asc
      end

    (3)while循环语句

    语法

    while(条件)

      begin

        语句或语句块

      [brwak | continue]

    end

    (4)case多分支语句

     case

      when 条件1 then 结果 1

      when 条件2 then 结果2

      [else 其他结果]

    end

    declare @date datetime 
    select @date = max(Examdate) from result
    inner join Subjiect on result.SubjectNo=Subjiect.SubjiectNo
    where SubjectName='java logic'
    
    select 学号=StudentNO, 成绩=
    
    case
        when StudentResult >90 then 'A'
        when StudentResult >80 then 'B'
        when StudentResult >80 then 'C'
        when StudentResult >80 then 'D'
        else 'A'
    end
        from result
        inner join Subjiect on result.SubjectNo=Subjiect.SubjiectNo
        where SubjectName='java logic'
    更多详情请关注 http://www.cnblogs.com/baixingqiang/
  • 相关阅读:
    半同步/半反应堆线程池
    各种排序算法总结
    【面试题】求连续子数组的最大和(三种解法)
    数据结构查找、插入、删除时间复杂度
    红黑树
    opencv 图像基本操作
    plotroc.m
    roc.m
    perfcurve.m
    637. Average of Levels in Binary Tree
  • 原文地址:https://www.cnblogs.com/baixingqiang/p/5236155.html
Copyright © 2020-2023  润新知