T-SQL为SQL 第四代编程语言它附加了第二代编程语言的特性,比如 流程控制(if-else while) 错误处理 存储过程 事物 触发器
一、T-SQL语句分类
1、数据定义语言(DDL)用来建立数据库及数据库对象 如:create打头
2、数据控制语句(DCL)用来控制数据库的一些权限
3、数据操作语句(DML) 操作数据的命令 如:select update 等
4、流程控制语句(FCL) 如:if、while 等
二、 SQL 注释和比较运算符
比较运算符:<、>、<>、>=、!>、!<、<=>、=
-- 单行注释 /* */ 多行注释
三、批处理
10条插入语句 不加go批处理关键字的话 sql引擎 会一条一条处理(会影响效率)
加go批处理关键字的话 sql引擎 会一次性处理(提高处理效率)
四、变量
1、全局变量
全局变量不是由用户的程序定义的,是在服务器级定义的
用户只能使用预先定义的全局变量
引用时必须以@@打头
如:
@@ERROR 最后一个T-SQL错误的错误号
@@IDENTITY 最后一次插入的标识值
@@LANGUAGE 当前使用的语言的名称
@@MAX_CONNECTIONS 可以创建的同时连接的最大数目
@@ROWCOUNT 受上一个SQL语句影响的行数
@@SERVERNAME 本地服务器的名称
@@TRANSCOUNT 当前连接打开的事务数
@@VERSION SQL Server的版本信息
2、局部变量
声明:declare @变量名 数据类型[....n]
赋值:set @变量名 = 值 或者 select @变量名 = 值
作用域:从声明开始到遇见go或存储过程的结尾
五、输出语句
select
1、以结果集形式输出
2、可以同时输出多个
3、易被java等应用程序直接得到
1、 以文本形式输出
2、输出一个字符串,如果有多个变量或常量要输出,用+连接;
3、如果类型不一致,用convert函数转换;
4、输出的结果不易被java等应用程序直接得到
六、流程控制语句
1、if...else语句
语法:
if(条件表达式)
begin
语句或语句块
end
else
begin
语句或语句块
end
注:可以进行多重嵌套
2、case 语句
CASE
WHEN 条件1 THEN 结果1
WHEN 条件2 THEN 结果2
……
ELSE 其他结果
END
搜索case格式
case
when 布尔表达式 then 结果表达式一
[....n]
[else 结果表达式n]
end
注:有限结果集适合使用case
3、while 语句
while 布尔表达式
begin
语句或语句块
[break]
语句或语句块
[continue]
语句或语句块
end
注:BREAK表示退出循环,如果有多条语句,才需要BEGIN-END语句块
七.子查询
1.什么是子查询
采用子查询实现
(1).子查询在WHERE语句中的一般用法:
(2).SELECT … FROM 表1 WHERE 字段1 >(子查询)
(3). 外面的查询称为父查询,括号中嵌入的查询称为子查询
(4).UPDATE、INSERT、DELETE一起使用,语法类似于SELECT语句
(5).将子查询和比较运算符联合使用,必须保证子查询返回的值不能多于一个
2.使用子查询替换表连接
采用子查询
(1).一般来说,表连接都可以用子查询替换,但有的子查询却不能用表连接替换
(2).子查询比较灵活、方便,常作为增删改查的筛选条件,适合于操纵一个表的数据
(3).表连接更适合于查看多表的数据
3. 我们曾学习过的查询,合并多个表中的数据的方法有那些?
(1).联合(Union)-合并多个数据表中的行
(2).子查询-将一个查询包含到另一个查询中
(3).联接-合并多个数据表中的列
4. EXISTS子句有什么作用?
通过在子查询中使用EXISTS子句,可以对子查询中的行是否存在进行检查。
联合(Union)-合并多个数据表中的行 子查询-将一个查询包含到另一个查询中 联接-合并多个数据表中的列 EXISTS子句:
通过在子查询中使用EXISTS子句,可以对子查询中的行是否存在进行检查。
5.IN子查询:
IN子查询后面可跟随返回多条记录的子查询,用于检测某列的值是否在某个范围。
6.子查询划分:
使用比较运算符的子查询 IN和NOT IN子查询 EXISTS和NOT EXISTS子查询。 子查询若按所处位置划分,可以为子查询在WHERE关键字之后,子查询在FROM关键字之后、子查询在SELECT关键字之后。