T-SQL编程基础内容

T-SQL编程基础

T-SQL语言的组成

数据定义语言(DDL,Data Definition Language):SQL让用户定义存储数据的结构和组织,以及数据项之间的关系。
数据操纵语言(DML,Data Manipulation Language):SQL允许用户或应用程序通过添加新数据、删除旧数据和修改以前存储的数据对数据库进行更新。
数据控制语言(DCL,Data Control Language):可以使用SQL来限制用户检索、添加和修改数据的能力,保护存储的数据不被未授权的用户所访问。

数据检索语言:SQL允许用户或应用程序从数据库中检索存储的数据并使用它。

数据共享:可以使用SQL来协调多个并发用户共享数据,确保他们不会相互干扰。
数据完整性:SQL在数据库中定义完整性约束条件,使它不会由不一致的更新或系统失败而遭到破坏。

T-SQL语句结构

SELECT  子句
[INTO 子句]
FROM 子句
[WHERE 子句]
[GROUP  BY 子句]
[HAVING  子句]
[ORDER BY 子句]

T-SQL常量

字符串常量

字符串常量定义在单引号内。

二进制常量

在Transact—SQL中定义二进制常量,需要使用0x,并采用十六进制来表示,不再需要括号。
例如,以下为二进制常量:
0xB0A1
0xB0C4
0xB0C5

BIT常量

在Transact—SQL中,bit常量使用数字0或1即可,并且不包括在引号中。如果使用一个大于1的数字,则该数字将转换为1。

日期和时间常量

定义日期和时间常量需要使用特定格式的字符日期值,并使用单引号。
例如,以下为日期和时间常量:
‘2012年10月9日’
‘15:39:15’
‘10/09/2012’
‘07:59 AM’

T-SQL变量

局部变量

局部变量是用户可自定义的变量,它的作用范围仅在程序内部。局部变量的名称是用户自定义的,命名的局部变量名要符合SQL Server标识符命名规则,局部变量名必须以@开头。
1.声明局部变量
局部变量的声明需要使用DECLARE语句。语法格式如下:

DECLARE
@varaible_name   datatype   [ ,… n  ]

参数说明:
@varaible_name:局部变量的变量名必须以@开头,另外变量名的形式必须符合SQL Server标识符的命名方式。
datatype:局部变量使用的数据类型可以是除text、ntext或者image类型外所有的系统数据类型和用户自定义数据类型。一般来说,如果没有特殊的用途,建议在应用时尽量使用系统提供的数据类型。这样做,可以减少维护应用程序的工作量。

全局变量

全局变量是SQL Server系统内部事先定义好的变量,不需要用户参与定义,对用户而言,其作用范围并不局限于某一程序,而是任何程序均可随时调用。全局变量通常用于存储一些SQL Server的配置设定值和效能统计数据。

SQL Server一共提供了30多个全局变量,本节只对一些常用变量的功能和使用方法进行介绍。全局变量的名称都是以@@开头的。
(1)@@CONNECTIONS
记录自最后一次服务器启动以来,所有针对这台服务器进行的连接数目,包括没有连接成功的尝试。
使用@@CONNECTIONS可以让系统管理员很容易地得到今天所有试图连接本服务器的连接数目。
(2)@@CUP_BUSY
记录自上次启动以来尝试的连接数,无论连接成功还是失败,都以ms为单位的CPU工作时间。
(3)@@CURSOR_ROWS
返回在本次服务器连接中,打开游标取出数据行的数目。
(4)@@DBTS
返回当前数据库中timestamp数据类型的当前值。
返回执行上一条Transact-SQL语句所返回的错误代码。
​ 在SQL Server服务器执行完一条语句后,如果该语句执行成功,将返回@@ERROR的值为0,如果该语句执行过程中发生错误,将返回错误的信息,而@@ERROR将返回相应的错误编号,该编号将一直保持下去,直到下一条语句得到执行为止。
​ 由于**@@ERROR**在每一条语句执行后被清除并且重置,应在语句验证后立即检查它,或将其保存到一个局部变量中以备事后查看。

注释符(Annotation)

注释语句不是可执行语句,不参与程序的编译,通常是一些说明性的文字,对代码的功能或者代码的实现方式给出简要的解释和提示。
在Transact-SQL中,可使用两类注释符:
ANSI标准的注释符(–),用于单行注释;例如下面SQL语句所加的注释。
use master --打开数据表
与C语言相同的程序注释符号,即“/”、“/”,“/”用于注释文字的开头,“/”用于注释文字的结尾,可在程序中标识多行文字为注释。

说明:
把所选的行一次都注释的快捷键是:Shift+Ctrl+C;一次取消多行注释的快捷键是:Shift+Ctrl+R。

运算符(Operator)

1.算术运算符

​ 算术运算符在两个表达式上执行数学运算,这两个表达式可以是数字数据类型分类的任何数据类型。算术运算符包括:+(加)、-(减)、×(乘)、/(除)、%(取余)。

2.赋值运算符

​ T-SQL 有一个赋值运算符,即等号 (=)。在下面的示例中,创建了@songname变量。然后利用赋值运算符将 @songname 设置成一个由表达式返回的值。

3.比较运算符

​ 比较运算符测试两个表达式是否相同。除了 text、ntext 或 image 数据类型的表达式外,比较运算符可以用于所有的表达式。比较运算符包括:>(大于)、<(小于)、=(等于)、>=(大于等于)、<=(小于等于)、!=(不等于)、!>(不大于)、!<(不小于),其中!=、!>、!<不是ANSI标准的运算符

比较运算符的结果是布尔数据类型有3种值:TRUE、FALSE及UNKNOWN。那些返回布尔数据类型的表达式被称为布尔表达式。

4.逻辑运算符
运 算 符行 为
ALL如果一个比较集中全部都是TRUE,则值为TRUE
AND如果两个布尔表达式均为TRUE,则值为TRUE
ANY如果一个比较集中任何一个为TRUE,则值为TRUE
BETWEEN如果操作数是在某个范围内,则值为TRUE
EXISTS如果子查询包含任何行,则值为TRUE
IN如果操作数与一个表达式列表中的某个相等的话,则值为TRUE
LIKE如果操作数匹配某个模式的话,则值为TRUE
NOT对任何其他布尔运算符的值取反
OR如果任何一个布尔表达式是TRUE,则值为TRUE
SOME如果一个比较集中的某些为TRUE的话,则值为TRUE
5.位运算符

​ 位运算符的操作数可以是整数数据类型或二进制串数据类型(image数据类型除外)范畴的。SQL支持的按位运算符。

运 算 符说 明
&按位AND
|按位OR
^按位互斥OR
按位NOT
6.字符串连接运算符

​ 连接运算符“+”用于连接两个或两个以上的字符或二进制串、列名或者串和列的混合体,将一个串加入到另一个串的末尾。语法如下:

<expression1>+<expression2>

流程控制语句

BEGIN…END语句

BEGIN…END语句用于将多个Transact-SQL语句组合为一个逻辑块。当流程控制语句必须执行一个包含两条或两条以上的T-SQL语句的语句块时,使用BEGIN…END语句。语法如下:
BEGIN
{sql_statement…}
END
​ 其中,sql_statement是指包含的Transact-SQL语句。
​ BEGIN和END语句必须成对使用,任何一条语句均不能单独使用。BEGIN语句后为Transact-SQL语句块。最后,END语句行指示语句块结束。

IF语句

IF<条件表达式>
​ {命令行|程序块}

IF…ELSE语句

IF选择结构可以带ElSE子句。IF…ELSE的语法:
IF<条件表达式>
​ {命令行1|程序块1}
[ELSE
​ {命令行2|程序块2}
​ 如果逻辑判断表达式返回的结果是“真”,那么程序接下来会执行命令行1或程序块1;如果逻辑判断表达式返回的结果是“假”,那么程序接下来会执行命令行2或程序块2。无论哪种情况,最后都要执行IF…ELSE语句的下一条语句。

CASE语句

CASE input_expression
WHEN when_expression THEN result_expression
​ [ …n ]
[
​ ELSE else_result_expression
END

WHILE循环语句

WHILE子句是T-SQL语句支持的循环结构。在条件为真的情况下,WHILE子句可以循环地执行其后的一条T-SQL命令。如果想循环执行一组命令,则需要使用BEGIN…END子句。
WHILE<条件表达式>
BEGIN
​ <命令行|程序块>
END

WHILE…CONTINUE…BREAK语句

循环结构WHILE子句还可以用CONTINUE和BREAK命令控制WHILE循环中语句的执行。
语法:
WHILE<条件表达式>
BEGIN
​ <命令行|程序块>
​ [BREAK][CONTINUE]
​ [命令行|程序块]
END
​ 其中,CONTINUTE命令可以让程序跳过CONTINUE命令之后的语句,回到WHILE循环的第一行命令。BREAK命令则让程序完全跳出循环,结束WHILE命令的执行。

RETURN退出语句

RETURN语句用于从查询过程中无条件退出。RETURN语句可在任何时候用于从过程、批处理或语句块中退出。位于RETURN之后的语句不会被执行。
语法:
RETURN[整数值]
​ 在括号内可指定一个返回值。如果没有指定返回值,SQL Server系统会根据程序执行的结果返回一个内定值。

GOTO跳转语句

GOTO命令用来改变程序执行的流程,使程序跳到标识符指定的程序行再继续往下执行。
语法:
GOTO 标识符
标识符需要在其名称后加上一个冒号“:”。
例如:“66:”,“loving:”。

WAITFOR挂起

WAITFOR指定触发器、存储过程或事务执行的时间、时间间隔或事件;还可以用来暂时停止程序的执行,直到所设定的等待时间已过才继续往下执行。
语法:
WAITFOR{DELAY<’时间’>|TIME<’时间’>
​ 其中“时间”必须为DATETIME类型的数据,如“12:23:47”,但不能包括日期。各关键字含义如下:
DELAY:用来设定等待的时间,最多可达24小时。
TIME:用来设定等待结束的时间点。

USE DB_0221
GO
CREATE TABLE CLASSINFOR
(
ID INT IDENTITY(10000,1)PRIMARY KEY,
NAME VARCHAR(20) NOT NULL,
SEX CHAR(2) NOT NULL,
AGE INT NOT NULL,
HOBBY VARCHAR(20)
)
GO
INSERT INTO CLASSINFOR
SELECT '李倩','女',23,'唱歌' UNION
SELECT '张德安','男',45,'篮球' UNION
SELECT '王锴','男',18,'跳舞' UNION
SELECT '张丹','女',21,'羽毛球' UNION
SELECT '赵开拓','男',32,'足球' UNION
SELECT '吴桐','男',5,'儿歌'
SELECT * FROM CLASSINFOR

USE DB_0221
DECLARE @NAME VARCHAR(20)
SELECT @NAME='吴桐'FROM CLASSINFOR
PRINT @NAME

DECLARE @X INT
SET @X=2
PRINT @X

DECLARE  @song  char(20)
SET  @song  =  'I  love  flower'
PRINT @song
--还可以为多个变量一起赋值,相应的SQL语句如下所示:
declare  @b  int, @c  char(10),@a  int   
select @b=1, @c='love',@a=2
PRINT @b
PRINT @c
PRINT @a

PRINT @@CONNECTIONS
INSERT INTO CLASSINFOR
SELECT '李倩','女',23,'唱歌' 
PRINT @@CURSOR_ROWS
PRINT @@DBTS
--记录错误
PRINT @@ERROR
INSERT INTO CLASSINFOR
SELECT '李鱼','女'
PRINT @@ERROR
--返回最近一次插入的identity列的数值,返回值是numeric
PRINT @@IDENTITY
--算术运算符
DECLARE @S INT,@W INT,@Q INT
SELECT @S=10,@W=5
SET @Q=@S+@W
PRINT @Q
DECLARE @S1 INT,@W1 INT,@Q1 INT
SELECT @S=10,@W=5
SET @Q=@S/@W
PRINT @Q
--赋值运算符
DECLARE @songname  char(20)
SELECT @songname ='loving'
print @songname
--比较运算符
SELECT * FROM CLASSINFOR WHERE SEX='女'AND AGE>18
SELECT * FROM CLASSINFOR WHERE SEX='女'AND HOBBY='唱歌'
--字符串连接运算符
DECLARE @names CHAR(20)
SET @names='梦不落雨林'
PRINT '我最喜欢的歌曲是:'+@names
--BEGIN...END
DECLARE @aa INT,@bb INT,@cc INT
SET @aa=2
SET @bb=3
BEGIN
SET @aa=@bb
SET @bb=@cc
SET @cc=@aa
END
PRINT @aa
PRINT @bb
--IF语句
DECLARE @dd INT
SET @dd=3
IF @dd>4
PRINT '@dd是正整数'
PRINT 'END'
--IF...ELSE语句
DECLARE @ee INT,@ff INT
SET @ee=5
SET @ff=6
IF @ee>@ff
BEGIN
PRINT '@ee大于@ff'
END
ELSE
BEGIN
PRINT '@ee小于@ff'
END
--WHILE语句
DECLARE @NUM INT,@SUM INT
SET @NUM=1
SET @SUM=0
WHILE @NUM<20
BEGIN
SET @SUM=@SUM+@NUM
SET @NUM=@NUM+1
END
PRINT @SUM
--WHILE语句
DECLARE @NUM1 INT,@SUM1 INT
SET @NUM1=1
SET @SUM1=0
WHILE @NUM1<=20
BEGIN
SET @SUM1=@SUM1+@NUM1
SET @NUM1=@NUM1+1
END
PRINT @SUM1
--WHILE...CONTINUE
DECLARE @X1 INT,@SUMS INT
SET @X1=1
SET @SUMS=0
WHILE @X1<20
BEGIN
SET @X1=@X1+1
IF @X1%2=0
SET @SUMS=@SUMS+@X1
ELSE
CONTINUE
PRINT '只有@x是偶数才输出这句话'
END
PRINT @X1
PRINT @SUMS
--RETURN
DECLARE @O INT   
SET @O=3                                    
if @O>0
print'遇到return之前'  
return
print'遇到return之后'
--GOTO命令用来改变程序执行的流程,使程序跳到标识符指定的程序行再继续往下执行。
--GOTO  标识符
--标识符需要在其名称后加上一个冒号“:”。
DECLARE @H INT
SELECT @H=1
LOVING:
PRINT @H
SELECT @H=@H+1
WHILE @H<=3 GOTO LOVING
-- WAITFOR指定触发器、存储过程或事务执行的时间、时间间隔或事件;还可以用来暂时停止程序的执行,直到所设定的等待时间已过才继续往下执行。
--语法:
--WAITFOR{DELAY<’时间’>|TIME<’时间’>
--其中“时间”必须为DATETIME类型的数据,如“12:23:47”,但不能包括日期。各关键字含义如下:
   --DELAY:用来设定等待的时间,最多可达24小时。
   --TIME:用来设定等待结束的时间点。
WAITFOR DELAY'00:00:05'
PRINT'北京时间12点整!'
WAITFOR DELAY'14:00:00'
PRINT'喜欢的歌曲:梦不落雨林!'
--CASE语句
USE DB_0221
SELECT KIND=
CASE
WHEN AGE<0 THEN 1
WHEN AGE>0 AND AGE<25 THEN 2
ELSE 0
END,
--CAST类型转换语句
CAST(NAME AS VARCHAR(20)) AS NAME01,
SEX AS sex
FROM CLASSINFOR
WHERE AGE IS NOT NULL
ORDER BY NAME DESC
--ORDER BY的方式:
--1,asc升序,可省略,是数据库默认的排序方式
--2,desc 降序,跟升序相反


重点

T-SQL与SQL的区别:

SQL是Structured Query Lanuage的缩写,意思为机构化查询语言。SQL语言的主要功能是同各种数据库建立联系,进行沟通。是标准的关系型数据库通用的标准语言。

T-SQL是Transact-SQL,是SQL在Microsoft SQL Server上的增强版,它是用来让应用程序与SQL Server沟通的主要语言。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值