T-sql
* 语法
1. 类型
- unicode字符串长量: N'hello world' ,双字节字符,用两个字节存储;
- 非unicode字符串: ‘hello world’;
- 注释: -- /**/
- 变量: 全局变量,由系统定义,以@@标记; 局部变量,用户定义,@标记;
- 局部变量的赋值: SET @a = 1 或者 SELECT @a = 1
2.聚合函数
- 聚合函数:对一组值计算后只返回一个值。除了count 函数外,其他函数都忽略null值;
avg, min, max, sum ,count( [ all | distinct ] expression )
select avg(distinct age) from person -- 查询person表里的年龄的平均值,相同值只计算一次
count(*) : 返回所有的项数,包括null值和重复项。而除了count(*)外,其他任何形式的count()函数都会忽略Null行。除了Count(*)函数外,其他任何聚合函数都会忽略NULL值,也就是说,AVG()参数里的值如果为Null则这一行会被忽略如计算平均值,这点要注意。
count(all表达式):返回非空的项数。
count(distinct表达式):返回唯一非空的项数
count_big的语法与count完全一样,只不过返回值为bigint数据类型,这样返回的数值范围就可以大大超过count。
3. 控制流
3.1 批处理
- 一个批处理是指由一个或多个语句组成的批处理, 一个批处理被一次性提交到sql实例。
- 在不同批处理中,流程控制不能跨批处理。
- GO关键字,批处理结束标识符。
DECLARE @i int; SET @i = 1; GO --分批了 PRINT @i --@i在这个批里未定义,下面请求不到
3.2 程序块
DECLARE @i int; SET @i = 0; WHILE(@i < 10) BEGIN --开始 SET @i = @i + 1; -- 赋值 IF(@i % 2 = 0) BEGIN --开始1 PRINT('跳过2的倍数' + CAST(@i AS varchar)); CONTINUE; END -- 结束1 ELSE IF (@i = 7) BEGIN --开始2 PRINT('到' + CAST(@i AS varchar) + '就跳出循环'); BREAK; END -- 结束2 PRINT @i; END --结束
DECLARE @i int,@j int set @i = 10; set @j = 20; select @i + @j ; --select运行变量属于这张表
SELECT Id,Name, CASE WHEN Id = 3 AND Sex = 0 THEN '帅哥' --这里要注意顺序,优先显示前面匹配到的,这个后面会提到 WHEN Id = 4 And Sex = 1 THEN '美女' WHEN Sex = 0 THEN '男' WHEN Sex = 1 THEN '女' ELSE '不清楚' END AS 性别 FROM Person