SQL 知识积累

(1)char 、varchar、nchar的区别
固定长度 (char) 或可变长度 (varchar) 字符数据类型


nchar 根据 unicode 标准所进行的定义,用给定整数代码返回 unicode 字符。   
char是固定长度的字节,varchar是可变长度的字节,nchar是unicode编码的固定字符长度。
如:12345 在char(6)存储为123456加一个空格,共6个字节。
中国 在char(6)存储为中国加两个空格,共6个字节。
12345 在varchar(6)存储为123456,共5个字节。
中国 在varchar(6)存储为中国,共4个字节。
nchar(6)对汉字和半角字符处理时一样的,即可以存储6个汉字,也可以存储6个字母  

(2)Truncate是一个能够快速清空资料表内所有资料的SQL语法。并且能针对具有自动递增值的字段,做计数重置归零重新计算的作用。

delete XiTong_RenShuXuQiu
truncate table XiTong_RenShuXuQiu

 (3)Isnull 函数主要作用是将为空的值替换为指定值,如果不为空返回检查类型的返回值,isnull的语法:

  Isnull (check_expression , replacement_value)

  参数check_expression ,是待检查是否为空的表达式,参数replacement_value是带替换的指定值,如果参数check_expression为空则参数replacement_value进行填充,如果check_expression不为空,则返回表达式相应的返回值类型,需要注意到是参数check_expression和参数replacement_value的类型需要保持一致,否则要进行相应的转换,下面通过实例说话,

  例一:

  select isnull(studentid,100) from student_info

  解释:查出student_info表中字段为studentid的值,如果字段studentid值为空就在字段studentid中添加100,或者你可以动态的向这个空字段添加值。

(4)存储过程中  Case  When   then     else    end  联合用法

    SELECT     XiTong_YuanGongXinXi.XingMing AS YuanGongName,
 (case ISNULL(XiTong_PaiBan.ZhouYi,0) WHEN 0  THEN '休班'  ELSE '夜班'  end) as ZhouYi
FROM   XiTong_YuanGongXinXi RIGHT OUTER JOIN
    XiTong_PaiBan ON XiTong_YuanGongXinXi.YuanGongID = XiTong_PaiBan.YuanGongID

  insert into  student(stuNum ,stuSex,stuClassNum)  values(@stuNum
 case @stuSex
 when '男' then 'true'
 when '女' then 'false'
 end
 ,@stuClassNum)

 (5)STR函数的应用

STR 函数功能是返回一个数字的等效字符串。 
语法
STR ( numeric_expression , length , decimal )
其中,numeric-expression 取任何位于 -1E126 和 1E127 之间的近似数字(浮点、实数或双精度)表达式。
length 是要返回的字符数(包括小数点、小数点右侧和左侧的所有位以及空白),缺省值为 10。
decimal 要返回的小数位数,缺省值为 0。

 (5)统计表中相同字段的数量

SELECT     XiTong_YuanGongXinXi_JiNeng_1.JiNengID, 
           XiTong_JiNeng.JiNengMingCheng, 
           COUNT(*) AS Number
FROM     XiTong_YuanGongXinXi_JiNeng AS XiTong_YuanGongXinXi_JiNeng_1 INNER JOIN
         XiTong_JiNeng ON XiTong_YuanGongXinXi_JiNeng_1.JiNengID = XiTong_JiNeng.JiNengID
GROUP BY XiTong_YuanGongXinXi_JiNeng_1.JiNengID, XiTong_JiNeng.JiNengMingCheng  
HAVING COUNT(*) >1
ORDER BY Number

 (6)统计一张表中,字段的值的个数,比如:张三,周一  早、中、晚、休的在某段事件内的次数

   select 
          XiTong_PaiBanTongJi.YuanGongID,
          XiTong_YuanGongXinXi.XingMing as "姓名",
          XiTong_YuanGongXinXi.HuShiBianHao as "编号",
          sum(case when ZhouYi='0' then 1 else 0 end ) as "休班次数", 
          sum(case when ZhouYi='1' then 1 else 0 end ) as "早班次数", 
          sum(case when ZhouYi='2' then 1 else 0 end ) as "中班次数",
          sum(case when ZhouYi='3' then 1 else 0 end ) as "晚班次数" 
   from   XiTong_PaiBanTongJi inner join XiTong_YuanGongXinXi 
       on XiTong_PaiBanTongJi.YuanGongID=XiTong_YuanGongXinXi.YuanGongID
   group by 
        XiTong_PaiBanTongJi.YuanGongID,
        XiTong_YuanGongXinXi.XingMing,
        XiTong_YuanGongXinXi.HuShiBianHao
运行结果如下:
原文地址:https://www.cnblogs.com/zhangyonglvdaomei/p/3380224.html