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
case

 

posted on 2018-07-13 11:40  莫伊筱筱  阅读(217)  评论(0编辑  收藏  举报