2-1 T-SQL概述

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:
2-1 T-SQL概述
u       T-SQL代码的基本格式及注释
u       T-SQL语法全局变量与局部变量
u       T-SQL的临时表和全局表
u       T-SQL的运算符号
   
T-SQL 就是 Transact-SQL ,是标准  SQL  MSSQL 环境下程式设计语言的增强版,它是用来让应用程式与 SQL Server 沟通的主要语言。 T-SQL 提供标准 SQL DDL  DML 功能,加上延伸的函数、系统预存程序以及程式设计结构 ( 例如 IF WHILE) 让程式设计更有弹性, T-SQL 的功能随著新版的 SQL Server 而持续成长。
2-1-1 格式化的T-SQL代码
T-SQL 的批处理是一组的扩展 SQL 语句,在一个批处理中可以包含一条或多条 Transact-SQL 语句,成为一个语句组。两个 GO 之间的 SQL 语句作为一个批处理,见图 2-1 所示。这样的语句组从应用程序一次性地发送到 SQL Server 服务器进行执行。 SQL Server 服务器将批处理编译成一个可执行单元,称为执行计划。
 

2-1 基本批处理是以GO语句为标识点
1. 注释
注释是程序代码中不执行的文本字符串(也称为注解)。使用注释对代码进行说明,不仅能使程序易读易懂,而且有助于日后的管理和维护。注释通常用于记录程序名称、作者姓名和主要代码更改的日期。注释还可以用于描述复杂的计算或者解释编程的方法。
SQL Server 中,可以使用两种类型的注释字符:
1 )单行注释:
该方法是 ANSI 标准的注释符 “--” ,它用于单行注释;
2 )多行注释:
该种方法是与 C 语言相同的程序注释符号,即 “/* */” “/*” 用于注释文字的开头, “*/” 用于注释文字的结尾,利用它们可以在程序中标识多行文字为注释。当然,单行注释也可以使用 “/* */” ,我们只需将注释行以 “/*” 开头并以 “*/” 结尾即可。反之,段落注释也可以使用 “--” ,只需使段落注释的每一行都以 “--” 开头即可。
实验:建立第一个 T-SQL 实验
首先,我们建立公司数据库sample,该数据库的基本表逻辑结构如图2-2所示。
 

2-2 Sample数据库的基本表
Use sample --该批处理执行打开数据库sample
Go /*批处理结束标志*/
--该批处理检索项目部员工
Select * From 员工数据表 Where 所属部门=’项目部’ and 工资>2000 Order by 姓名
Go/*批处理结束标志*/
--下面的批处理创建视图
Create view PM_View
As
Select * from 员工数据表 where 所属部门=’项目部
Go
2. 结束TSQL语句的标准
TSQL 标准规定在每个命令行末尾使用分号结束该部分的批处理 TSQL 语句,但需要注意的是, TSQL 编码时候分号是可选择的,但是请不要在下面的位置使用分号:
(1)     不要在 try end 后面添加分号
(2)     不要在 if 语句后面添加分号
(3)     必须在 SET 之前添加分号
2-1-2 T-SQL语法变量
变量是一种语言中必不可少的组成部分。 Transact-SQL 语言中有两种形式的变量,一种是用户自己定义的局部变量,另外一种是系统提供的全局变量。
1. 全局变量
SQL Server 系统本身就提供了一些全局变量。全局变量是 SQL Server 系统内部使用的变量,其作用范围并不仅仅局限于某一程序,而是任何程序均可以随时调用。全局变量通常存储一些 SQL Server 的配置设定值和统计数据。用户可以在程序中用全局变量来测试系统的设定值或者是 Transact-SQL 命令执行后的状态值。在使用全局变量时应该注意以下几点:
(1)     全局变量不是由用户的程序定义的,它们是在服务器定义的。
(2)     用户只能使用预先定义的全局变量。
(3)     引用全局变量时,必须以标记符 “@@” 开头。
(4)     局部变量名称不能与全局变量名称相同,否则会在应用程序中出现不可预测的结果。
    2-1 基本全局变量含义表
全局变量名
含义
@@ERROR
最后一个 T-SQL 错误的错误号
@@IDENTITY
最后一次插入的标识值
@@LANGUAGE
当前使用的语言的名称
@@MAX_CONNECTIONS
可以创建的同时连接的最大数目
@@ROWCOUNT   
受上一个 SQL 语句影响的行数
@@SERVERNAME
本地服务器的名称
@@TRANSCOUNT 
当前连接打开的事务数
@@VERSION
SQL Server 的版本信息
SQL-sever 提供的全局变量共有 33 个,但是并不是每一个都会经常用到,基本的全局变量见表 2-1 所示。下面举例说明部分全局变量的用法:
实验:  T-SQL 全局变量实验
Use sample
Go
--1:检测限制检查冲突
--将项目部的工资更新为
Update 员工数据表 Set 工资=3000 where 所属部门='项目部'
--检查是否出现限制检查冲突
If @@ERROR=547
print '出现限制检查冲突,请检查需要更新的数据'
--@@ERROR全局变量将返回最后执行的T-SQL语句的错误代码,数据类型为integer,如果成功@@ERROR返回0,否则返回错误代码。有关错误代码的信息请在sysmessages系统表中查找。
-- print关键词是打印输出的语句,既可以输出“字符串”或者“字符串常量”或者“字符串变量”
--例如:Print '你好吗?'
Print @@version
--2:全局变量@@CONNECTIONS,检测连接次数
SELECT GETDATE( ) AS '当前的时期和时间', @@CONNECTIONS AS '试图登录的次数'
--3:全局变量@@RowCount的用法
--@@RowCount全局变量用以判别查询是否成功,并返回查询到的行数。
Use school
GO
update student set sname='叮当' where sname='老叮当';
if @@rowcount=0
 begin
    print '没有修改任何行'
End
2. 局部变量
局部变量是一个能够拥有特定数据类型的对象,它的作用范围仅限制在程序内部。局部变量被引用时要在其名称前加上标志 ,而且必须先用 DECLARE 命令定义后才可以使用。  
(1)     定义局部变量的语法形式如下:
DECLAER {@local_variable data_type} [ n]
其中 参数 @local_variable 用于指定局部变量的名称 变量名必须以符号 @ 开头 并且局部变量名必须符合 SQL Server 的命名规则。参数 data_type 用于设置局部变量的数据类型及其大小。 data_type 可以是任何由系统提供的或用户定义的数据类型。但是,局部变量不能是  text ntext   image  数据类型。
(2)     定义局部变量的语法形式如下:
使用 DECLARE 命令声明并创建局部变量之后,会将其初始值设为 NULL ,如果想要设定局部变量的值,必须使用 SELECT 命令或者 SET 命令。两种语法形式为:
q         SET { { @local_variable = expression } 
q         SELECT { @local_variable = expression }[ ,...n ]
其中,参数 @local_variable 是给其赋值并声明的局部变量,参数 expression 是任何有效的 SQL Server 表达式。
实验:  T-SQL 局部变量实验
--1、通过SET进行附值实验
Use school
go
declare @char1 float,@num char(40)
select @char1=max(degree) from score,course where cname='高等数学' and score.cno=course.cno
set @num='高等数学的最高成绩是:'
print @num+Ltrim(STR(@char1)) --str函数的作用是将数值类型转换成为char类型;Ltrim函数是去除左边空格。
--问题说明:如果高等数学的最高成绩查询为空,则执行‘print @num+STR(@char1)’语句后显示为空,表示空值与字符串拼接后显示信息也为空。
--2、通过SELECT进行附值,需要注意的事项是:
(1)如果查询之中select返回多个值,则仅仅将最后一个数值附值给变量
(2)如果没有返回值则保持当前的变量值
use school
go
declare @cc1 nvarchar(32)
select @cc1=sno from score
print @cc1 --此句话可以将局部变量@cc1正常显示出来
Go
print @cc1 
--由于已经执行Go语句,批处理结束,因此此句话执行错误,@cc1局部变量生命周期已经结束
--3、通过SELECT进行附值
declare @var1 nvarchar(30)
set @var1='张飞'
select @var1=sname from student where sno='0000'
print @var1 
--0000编号的学生是没有的此时@var1将显示初始值张飞”,如果有则显示查询到的信息
select @var1=sname  from student  where sno='101'
print @var1
--4、通过SELECT进行附值
Use sample --调用sample数据库
Go
--开始声明局部变量
Declare @max_salary int
--将其赋值为全体员工的工资最大值
Select @max_salary=max(工资) from 员工数据表
Go
-- 注意局部变量的作用范围是从声明该局部变量的地方开始到声明局部变量的批处理或存储过程的结尾。在局部变量的作用范围以外引用该局部变量将引起语法错误。
2-1-3 临时表和全局表
除了基本表和视图意外, SQL Server 还提供临时表和全局表供数据库访问者进行访问操作,从本质上来说,临时表和全局表都属于虚表,其生命周期视用户访问情况而生成或者消失,唯一不同的是为建立者提供数据临时访问,还是为所有数据库访问用户提供临时的访问。
1. 局部临时表
SQL Server 支持局部临时表(简称临时表)。临时表就是那些名称以井号 (#) 开头的表。如果当用户断开连接时没有除去临时表, SQL Server 将在一定时间后自动除去临时表。临时表不存储在当前数据库内,而是存储在系统数据库 tempdb 内。
局部临时表的创建方法与用户表相同,其生命周期自批处理开始生成,自该批处理结束终止,该临时表将从 tempdb 库中被删除。局部临时表往往在存储过程开发中被设计,至该存储过程结束终止。
实验:  T-SQL 建立局部临时表实验
--1
create table #stupass
( sno int primary key, sname varchar(20), sdegree int, cname varchar(20));
2. 全局临时表
以两个井号 (##) 开头的那些表名,在所有连接上都能够访问到的表就是全局临时表。如果在创建全局临时表的连接断开前没有显式地除去这些表,那么只要所有其它任务停止引用它们,这些表即被除去。当创建全局临时表的连接断开后,新的任务不能再引用它们。当前的语句一旦执行完,任务与表之间的关联即被除去;因此通常情况下,只要创建全局临时表的连接断开,全局临时表即被除去。
实验:  T-SQL 建立全局临时表实验
--1
create table ##stupass1
( sno int primary key, sname varchar(20), sdegree int, cname varchar(20));
3. 全局临时表和局部临时表的差异
二者在名称、可见性和可用性上均不相同。本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 SQL Server 实例断开连接时被删除。全局临时表的名称以符号 (##) 打头,创建后对任何用户都是可见的,当所有引用该表的用户从 SQL  Server 断开连接时被删除。
例如,如果创建名为 employees 的表,则任何人只要在数据库中有使用该表的安全权限就可以使用该表,除非它已删除。如果创建名为  #employees 的本地临时表,只有您能对该表执行操作且在断开连接时该表删除。如果创建名为 ##employees 的全局临时表,数据表中的任何用户均可对该表执行操作。如果该表在您创建后没有其他用户使用,则当您断开连接时该表删除。如果该表在您创建后有其他用户使用,则 SQL Server 在所有用户断开连接后删除该表。
2-1-4 运算符
运算符是一些符号,它们能够用来执行算术运算、字符串连接、赋值以及在字段、常量和变量之间进行比较。在 SQL Server 2005 中,运算符主要有以下六大类:算术运算符、赋值运算符、位运算符、比较运算符、逻辑运算符和字符串串联运算符。
1. 算术运算符
算术运算符可以在两个表达式上执行数学运算,这两个表达式可以是数字数据类型分类的任何数据类型。算术运算符包括加( + )、减(-)、乘( * )、除( / )和取模( % )。
2. 赋值运算符
Transact-SQL  中只有一个赋值运算符,即( = )。赋值运算符使我们能够将数据值指派给特定的对象。另外,还可以使用赋值运算符在列标题和为列定义值的表达式之间建立关系。
3. 位运算符
位运算符使我们能够在整型数据或者二进制数据( image  数据类型除外)之间执行位操作。此外,在位运算符左右两侧的操作数不能同时是二进制数据。表 2-2 列出了所有的位运算符及其含义。
    2-2 位运算符
运算符
含义
& (按位 AND)
按位 AND(两个操作数)
| (按位 OR)
按位 OR(两个操作数)
^ (按位互斥 OR)
按位互斥 OR(两个操作数)
4. 比较运算符
比较运算符亦称为关系运算符,用于比较两个表达式的大小或是否相同,其比较的结果是布尔值,即 TRUE (表示表达式的结果为真)、 FALSE (表示表达式的结果为假)以及 UNKNOWN 。除了 text ntext   image  数据类型的表达式外,比较运算符可以用于所有的表达式。
5. 逻辑运算符
逻辑运算符可以把多个逻辑表达式连接起来。逻辑运算符包括 AND OR NOT 等运算符。逻辑运算符和比较运算符一样,返回带有  TRUE   FALSE  值的布尔数据类型。       三个运算符的优先级别为: NOT AND OR
6. 字符串串联运算符
字符串串联运算符允许通过加号( + )进行字符串串联,这个加号即被称为字符串串联运算符。例如对于语句 SELECT ’abc’+’def’ ,其结果为 abcdef
7. 运算符的优先级
SQL Server 2005 中,运算符的优先等级从高到低如下所示,如果优先等级相同,则按照从左到右的顺序进行运算。
(1)        括号:();
(2)        乘、除、求模运算符: * / %
(3)        加减运算符:+,-;
(4)        比较运算符: = > < >= <= <> != !> !<
(5)        位运算符: ^ & |
(6)        逻辑运算符: NOT
(7)        逻辑运算符: AND
(8)        逻辑运算符: OR




本文转自 qianshao 51CTO博客,原文链接:http://blog.51cto.com/qianshao/348282,如需转载请自行联系原作者

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
30天前
|
SQL 关系型数据库 MySQL
TiDB支持的SQL语法概述
【2月更文挑战第28天】本章将对TiDB所支持的SQL语法进行概述,涵盖其主要的语法特性和功能。我们将从基本的SQL语句到更复杂的查询和操作,逐步介绍TiDB的SQL语法,帮助读者更好地理解和使用TiDB进行数据库操作。
|
5月前
|
SQL 关系型数据库 MySQL
【MySQL入门到精通-黑马程序员】MySQL基础篇-SQL概述及DDL
(精度指数的所有位数;标度指小数点后数的位数) 字符串类型
60 0
|
7月前
|
SQL 存储 关系型数据库
MSSQL之一 数据库系统简介 与SQL Server 2008概述
MSSQL之一 数据库系统简介 与SQL Server 2008概述
83 0
|
2月前
|
SQL 存储 算法
【数据库SQL server】数据库系统概述与DBS结构
【数据库SQL server】数据库系统概述与DBS结构
68 0
【数据库SQL server】数据库系统概述与DBS结构
|
3月前
|
SQL 安全 网络安全
SQL注入概述
SQL注入概述
14 0
|
3月前
|
SQL 存储 数据库
PL/SQL触发器的概述和用途
PL/SQL触发器的概述和用途
30 2
|
9月前
|
SQL 存储 关系型数据库
|
5月前
|
SQL 存储 数据库
SQL概述及数据定义
SQL概述及数据定义
65 0
|
5月前
|
SQL 分布式计算 HIVE
196 Spark SQL概述
196 Spark SQL概述
36 0
|
6月前
|
SQL 关系型数据库 MySQL
MySQL知识【SQL概述】第三章
MySQL知识【SQL概述】第三章