T-SQL编程与高级查询
1、T-SQL 与 SQL
SQL 第四代编程语言 你只需要告诉计算机你要做什么事情 例: select update
T-SQL 附加了第二代编程语言的特性,比如 流程控制(if-else while) 错误处理 存储过程 事物 触发器
2、 SQL 注释
-- 单行注释 /* */ 多行注释
3、批处理
10条插入语句 不加go批处理关键字的话 sql引擎 会一条一条处理(会影响效率)
加go批处理关键字的话 sql引擎 会一次性处理(提高处理效率)
变量
在T-SQL中,变量是能存储值并参与运算的一个实体,但在T-SQL的变量要比其他语言中的变量简单。
在T-SQL中只有两种变量:全部变量和局部变量。全局变量是由系统所定义,而局部变量是由用户定义
可对其赋值和使用。
局部变量
T-SQL中的局部变量是可以保存单个特定类型数据值的对象
1、声明T-SQL局部变量的语法:
1 declare {@变量名 数据类型【。。。。n】}
主意:如果要声明多个变量,请在定义的第一个局部变量后使用一个逗号分开。
为T-SQL局部变量赋值
为T-SQL局部变量赋值有两种方法:使用set语句和使用select语句,一般使用set语句
赋值。
T-SQL局部变量赋值的语法:
set @变量名=值 实例 declare name varchar(10) set name='张三'
全局变量
全局变量是SQL server系统内部的变量其作用范围并不仅仅局限于某一个程序,而是任何
程序均可以随时调用。
常用的全局变量
全局变量 | 说明 |
@@connections | 返回SQL Server自上次启动以来尝试的连接数,无论成功或失败 |
@@error | 返回上一次的标识值 |
@@IDENTITY | 返回上次插入的标识值 |
@@LANGUAGE | 返回当前所使用语言的名称 |
@@MAX_CONNECTIONS | 返回SQL Server实例允许同时进行的最大用户连接数 |
@@ROWCOUNT | 返回受上一语句影响的行数 |
@@SERVICENAME | 返回SQL Server的本地服务器的名称 |
@@SERVICENAME | 返回SQL Server正在其下运行的注册表项的名称 |
@@TOTAL_ERRORS | 返回SQL Server自上次启动之后所遇到的磁盘写入错误数 |
@@TRANCOUNT | 返回当前连接的活动事物数 |
@@VERSION | 返回当前的SQL Server版本、处理器体系结构、生成日期和操作系统 |
输出语句
在T-SQL中可以使用两种方式输出提示信息:使用print和select语句进行输出。
print语句的语法:
print{字符串 | 变量 | 函数 | 字符串表达方式} 实例 print 'sql server2008 '
select的语法:
select @@version as 'sql server 版本',getdate()'当前时间'
T-SQL的流程控制
T-SQL提供称为控制流的特殊关键字,用于控制T-SQL语句、语句块和存储过程的执行流。
if.....else语句
if....else语句是条件判断语句,它用于判断当某一条件成立时
执行某语句或语句块,条件不成立时执行另一条语句或语句块
if....else语句的语法形式: if(条件表达式) 语句或语句块 else 语句或语句块 if.....else的语法: begin ....语句 end else begin ...语句 end
case语句
使用case语句可以进行多个分支的选择。case具有两种格式:
简单case格式。
收索case格式。
简单case格式的语法: case 测试表达式 when 表达式 then 结果表达式 1 【。。。n】 [else 结果表达式 n] end 搜索case格式的语法: case when 布尔表达式 then 结果表达式 1 【。。。。n】 [else 结果表达式 n] end
while语句
while 语句是通过布尔表达是来设置一个条件,当条件成立时,重复执行一个语句或语句块,
重复执行的部分成为循环体
while语句的语法: while 布尔表达式 {语句或语句块} 【break】 {语句或语句块} 【continue】 {语句或语句块}
7 、子查询
合并多个表中的数据的方法合并多个表中的数据的方法:
- 联合(Union)-合并多个数据表中的行
- 子查询-将一个查询包含到另一个查询中
- 联接-合并多个数据表中的列
EXISTS子句:
通过在子查询中使用EXISTS子句,可以对子查询中的行是否存在进行检查。
IN子查询:
IN子查询后面可跟随返回多条记录的子查询,用于检测某列的值是否在某个范围。
子查询划分:
- 使用比较运算符的子查询
- IN和NOT IN子查询
- EXISTS和NOT EXISTS子查询。
子查询若按所处位置划分,可以为子查询在WHERE关键字之后,子查询在FROM关键字之后、子查询在SELECT关键字之后。