3.1 T-SQL 简介
T-SQL(Transact-SQL)是Microsoft公司在关系型数据库管理系统 SQL Server中的SQL--3标准的实行,是微软对SQL的扩展,具有SQL的主要特点,同时增加了变量,运算符、函数、流程控制和释放等语言元素,使用其功能更加强大。
T-SQL对SQL Server 十分重要,SQL Server 中使用图形界面能够完成的所有功能,都可以利用T-SQL 来实现。使用T-SQL操作时,与SQL server通用的所以应用程序都通过向服务器发送T-SQL语句来进行,而与应用程序的界面无关。
在第一章中,我们学习了使用SQL语句实现数据库,其中包括了建库、建表建约束和SQL server安全管理中创建登陆账号、数据库用户、授权等,其实这些语句都属于T-SQL语句。在使用T-SQL语句删除数据库、删除表时,我们还可以使用了IF语句先判断数据库、表是否存在。这里的IF语句也将是本章要介绍的一个知识点。
T-SQL语句的分类如下所示。
1.变量声明。T-SQL语句中可以使用两种类型的变量,局部变量和全局变量。
2.数据定义语言(Date Definition Language,DDL),用来建立数据库及数据库对象,绝大部分以CREATE开头,如CREATE TABLE等。
3.数据控制语言 (Data Control Languaage,DCL),用来控制数据库组件的存取许可、权限等命令。
4.数据库操作语言 (Data Control Languaage,DML),用来操作数据库中数据的命令,如SELECT、UPDATE等。
5.流程控制语言 (Flow Control Language,FCL),用于控制应用程序流程语句,如IF、CASE等。
3-2 T-SQL中的注释
注释时程序代码中不执行的文本字符串。在程序中加入注释说明,使程序容易维护。注释中的所有内容不会被执行,因此可以在注释中编写有关程序内容的说明,使程序变得易读。
在SQL SERVER中有两种编写注释的方式。
1.嵌行类的注释语句
a.可以用两个连字符(--)b./*..........*/
3-3 T-SQL中的批处理
批处理是指包含一条或多条T-SQL语句的语句组,这组语句从应用程序一次性地发送到 SQL Server服务器执行。SQL Server服务器批处理语句编译成一个科执行单元,这种单元称为执行单元。
批处理实例:
INSERT INTO CcardInfo values('023-001','123456',50,2013-05-10,10:00:00) select * from cardInfo go
3.4 局部变量
1.声明 T-SQL局部变量
语法:
DECLARE{@变量名 数据类型 [,...n]}
实例:
DECLARE @mycounter int
2. 为T-SQL局部变量赋值
第一次声明变量时,其值设置为NULL。若要为局部变量赋值,有两种方法:使用set语句和使用select语句。
语法:
set @变量名 = 值 --实例 /*声明三个局部变量:@name、@row_count、@year*/ declare @name ncarchar(20),@row_count int,@year int
/*使用set语句为局部变量赋值*/ set @name="张三" --将查询语句返回的值赋值给row_count
set @row_count=(select count(*) from cardInfo) --调用系统函数,将YEAR()函数返回的值赋值给@year
set @year=year(GETDATE()) -- @row_count 变量自增 SET @row_count=row_count +1
3.6 T-SQL的流程控制:
T-SQL 提供称为控制流的特殊关键字,用于控制T-SQL语句、语句块和存储过程的执行流。
1.if......else语句的语句法形式为:
if(条件语句) 语句或语句块 else 语句或语句块 --实例 if(条件语句) begin ....语句 end else begin ...语句 end
2. WHILE语句:
while 语句通过布尔表达式来设置一个条件,当这个条件成立时,重复执行一个语句或语句块,重复执行部分为循环体。
while语句的语法:
while 布尔表达式 {语句或语句块 } [break] {语句或语句块 } [continue] {语句或语句块 }
3.使用子查询
子查询是嵌套在select、insert、update、和delect语句或其他子查询中的查询,例如包含在select语句的where 子句和having子句中的select语句。子查询也称为内部查询或内部选择,而包含子查询的语句也称为外部查询或外部选择。
子查询可以把一个复杂的查询分解成一些系列的逻辑步骤。当一个查询依赖于另一个查询时,子查询会很有用。常用的子查询有:
a.使用比较运算符(=、<>、>、>=、<、!>、!<或<=)的子查询
b,in和not in 子查询
c.exists和not exists 子查询
3.7.1 使用比较运算符的子查询
由一个比较运算符(=、<>、>、>=、<、!>、!<或<=)引用的子查询就称为使用比较运算符的子查询。
使用运算符的实例:
declare @cardid int select @cardid=cardid from cardinfo where cardnumber='023-002' select * from recordinfo where datediff(month,endtime,GETDATE())=0 ANO cardid=@cardid go
3.7.2 EXISTS和NOT EXISTS子查询
使用 EXISTS 关键字引入一个子查询时,就相当于进行一次存在测试。外部查询的where子句测试子查询返回的行是否存在。
使用EXISTS 引入的子查询的语句:
WHERE[NOT] EXISTS(子查询)