SQLServer数据库开发

巧了我就是萌 提交于 2019-12-05 16:57:24

                                         SQLServer数据库开发


1、T-SQL编程

1变量

局部变量

局部变量是用户可自定义的变量,它的作用范围仅在程序内部。在程序中通常用来储存从表中查询到的数据,或当作程序执行过程中暂存变量使用。局部变量必须以“@”开头,而且必须先用DECLARE命令说明后才可使用。其说明形式如下:
DECLARE @
变量名变量类型 [@变量名变量类型…]

例如:DECLARE @id char(10) —–声明一个长度为10的字符变量

全局变量

全局变量不是由用户的程序定义的,它们是在服务器级定应义的。只能使用预先说明及定义的变局变量。引用全局变量时,必须以“@@”开头。局部变量的名称不能与全局变量的名称相同、否则会在应用中出错。

常用全局变量

@@ERROR

最后一个T-SQL错误的错误号

@@IDENTITY

最后一次插入的标识值

@@LANGUAGE

当前使用的语言的名称

@@MAX_CONNECTIONS

可以创建的同时连接的最大数目

@@ROWCOUNT      

受上一个SQL语句影响的行数

@@SERVERNAME

本地服务器的名称

@@TRANSCOUNT   

当前连接打开的事务数

@@VERSION     

SQL Server的版本信息

 

例如: select @@VERSION as w  --返回SQL服务器安装的日期、版本和处理器类型。2输出语句

使用print或select输出

Print/Select 变量或表达式

3控制语句

   在c语言中,逻辑控制语句是if-else,switch,for,while,在sql编程中,也大相径庭,这里的逻辑控制语句分别是:if-else,while,case-end语句

if-else语句

语法格式为:

if(条件)
    begin
        语句1
        语句2
    end
else
    begin
        语句1
        语句2
    end

注意:begin…end相当于c语言中的大括号,有多条语句才使用begin…end,相当于begin…end之间的语句就是一个语句块

看个实例更容易理解,例:

declare @myavg float
select @myavg=avg(writexam) from stumake
print '本班平均分' + convert(varchar(5),@myavg)
if(@myavg>70)
    begin
        print '前三的成绩为'
        select top 3 * from stumake order by writexam dese
    end
else
    begin
        print '后三名的成绩为'
        select top 3 * from stumake order by writexam asc
    end

在使用T-SQL编程时,可以切换视图来查看结果,工具>选项>查询结果>常规>显示结果的默认方式>以文本格式显示结果,查看效果更好

while循环语句

语法格式为:

while(条件)
    begin
        语句1
        语句2
        break
    end

注意:break是表示结束循环,与c语言中的辅助控制语句break,continue类似

看个实例:

declare @n int
where(1=1) --条件永远成立
  begin
    select @n=count(*) from stuMarks 
            where writtenExam<60    --统计不及格人数
    if (@n>0)
       update stuMarks     --每人加2分
       set writtenExam=writtenExam+2 
   else
       break    --退出循环
  end
print '加分后的成绩如下:'
select * from stuMarks

case-end多分支语句

语法格式为:

case
    when 条件1 then 结果1
    when 条件2 then 结果2
    else 其他结果
end

 

4批处理

批处理是作为一个逻辑单元的T-SQL语句。如果一条语句不能通过语法分析,那么不会运行任何语句。如果一条语句在运行时失败,那么产生错误的语句之前的语句都已经运行了。为了将一个脚本分为多个批处理,可使用GO语句。

GO语句的特点:

GO语句必须自成一行,只有注释可以再同一行上。

  它使得自脚本的开始部分或者最近一个GO语句以后的所有语句编译成一个执行计划并发送到服务器,与任何其他批处理无关。

  GO语句不是T-SQL命令,而是由各种SQL Server命令实用程序(如:ManagementStudio中的"查询"窗口)识别的命令。

2、SQL高级查询

1嵌套子查询

   子查询也称为内部查询或内部选择,而包含子查询的语句也称为外部查询或外部选择

  子查询是嵌套在另一个查询中的select—from—where表达式。子查询嵌套在where子句中,通常用于对集合的成员资格、集合的比较以及集合的基数进行检查,还用于:空关系测试,重复元祖存在性测试,from子句中的子查询,with子句。

    集合成员资格:连接词in测试元组是否是集合中的成员,集合是由select子句产生的一组值构成的,对应的还有not in。

短语“至少比某一个要大”在SQL中用“>some”表示。

some子句的定义:C<comp> some r <=>存在t属于r(C <comp> t),其中<comp>可以为:< ,>,=,……(=some)=in;但是,(不等于some)不等于notin。

   在SQL中,结构>all对应于词组“比所有的都大”。

  all子句的定义:C <comp> all r <=> 任意t属于r(C<comp>t);(不等于all)等于not in 但是,(=all)不等于in。

SQL还有一个特性可测试一个子查询的结果中是否存在元组。exists结构在作为参数的子查询为空时返回true值。

      Exists r <=> r不等于0

      Not exists r<=> r=0

 还可以将“关系A包含关系B”写成“not exists(B except A)”.

还有一个布尔函数,用于测试在一个子查询的结果中是否存在重复元组。如果作为参数的子查询结果中没有重复的元组unique结构将返回true值。

SQL允许在from子句中使用子查询表达式。任何select-from-where表达式返回的结果都是关系,因而可以被插入到另一个select-from-where中任何关系可以出现的位置。

2聚合技术

SQL提供了五个固有聚集函数:

                        平均值:avg

                                 最小值:min

                                 最大值:max

                                 总和:sum

                                 计数:count

            其中,sum和avg的输入必须是数字集,但其他运算符还可以作用在非数字数据类型的集合上,如字符串。

还有分组聚集(group by):其中子句出的一个或多个属性是用来构造分组的,在group by子句中的所有属性上取值相同的元组将被分在一个组中。

having子句类似于where子句,但其是对分组限定条件,而不是对元组限定条件,having子句中的谓词在形成分组后才起作用,因此可以使用聚集函数。

3排序函数

row_number()

函数一般用于组内排序,而其他三个函数是对结果集排序

特点:没有并列编号,不跳空编号

rank()

特点:有并列编号,有跳空编号        

dense_rank()

特点:有并列编号,没有跳空编号

4公用表表达式

语法结构

Withexpression_name [(column_name)(…..n)]

AS

(CTE query_definition) 查询结果

后续使用结果集时可直接使用公用表名称expression_name

3、存储过程

1存储过程的概念(存储过程都是用exec调用)

存储过程(procedure)类似于C语言中的函数,用来执行管理任务或应用复杂的业务规则,存储过程可以带参数,也可以返回结果。

存储过程可以包含数据操纵语句、变量、逻辑控制语句等,比如:单个select语句,select语句块,select语句与逻辑控制块。

存储过程优点: 

  执行速度更快

  允许模块化程序设计

  提高系统安全性

  减少网络流通量

2系统存储过程

  由系统定义,存放在master数据库中

  类似C语言中的系统函数

  系统存储过程的名称都以“sp_”开头或”xp_”开头

3用户自定义存储过程

   CREATE  PROC[EDURE]  存储过程名 

    @参数1  数据类型 =默认值 OUTPUT,

    ……,

    @参数n  数据类型 =默认值 OUTPUT

    AS

    SQL语句

GO

4RAISERROR

RAISERROR ( { msg_id | msg_str | @local_variable }        
            { ,severity ,state }        
            [
 ,argument [ ,...n ] ] 
          )       
   [
 WITH option [ ,...n ] ]

用户可定义0-18之间严重级别

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!