• 08年在大学学习数据库的笔记


    这是08年在大学时候学习SqlServer的笔记,和各位交流下,温故而知新。 

    (1)临时表,#table

    (2)表变量,

    上面2个使用的区别是小的表一般使用表变量,大的表使用临时表。这2个和表一样使用。不过他们使用完后就消失了,有生命周期的。

    g.l 局部/全局 区别在那? # /##的区别 优点,什么地方使用,能否存储大小数据?.

    2008-05-27 局部与全局的区别,就是于局部就是对于当前登陆的用户有效,全局都全部登陆的用户都有效.
    本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 SQL Server 实例断开连接时被删除。全局临时表的名称以两个数字符号 (##) 打头,创建后对任何用户都是可见的,当所有引用该表的用户从 SQL Server 断开连接时被删除。

    ***派生表***

    就是一个中间表,在查询的过程中生成,没有什么的,一般生成的这个表指定一个别名,主要是便于使用

    (3)CTE, G.L

    这个在2005里面很酷,我记得的是有2个,一个是可以实现递归,实现树的数据结构,及层次的迭代,另外一个就是在视图中不能返回前面几个(因为返回的确定),可以使用这个来替代,可以认为在一般的表中有限制时都可以用这个来转换

    (4)UDF,

    用户自定义函数,可以用变量来传递参数,也可以用子查询来传递参数

    ***游标***,
    这个是面向过程的处理方式,和我们一般的 select  from...结构的面向集合的方式是截然不同的,就像一个是面向过程,一个面向对象的一样。使用游标有开销,一般应该考虑使用,但是在2种情况(目前知道的)可以使用考虑游标,一种是排序的时候,但是排序的内部分组有大有小(视具体的情况),如果分组很小,游标体现不出来优势,用集合的方式处理也是可以的,甚至速度更快,要看具体的情况,如果分组大,则应该用游标,另一种是可以自定义函数

    (5)视图

    提供一种用户的看数据的方式,定义在数据字典中存在,是一个虚表

    一般把多表的查询放在一个视图上使用。

     (6)索引,

    有组合索引,聚集索引,非聚集索引,覆盖索引有include()的关键字

    索引是物理存在的,主要是提高查询速度的

    (7)触发器,

    三种触发器的使用:insert 、delete,update,

    instead of 这个可以处理视图不能实现的基于多表的更新

    也可以将多个触发器放在一起使用。

    (8)约束
    恢复删除的表,看一看日志能不能搞定. g.l
    这两个是维护数据的完整性和一致性,在设置约束的时候有的时候也同步建立非聚集索引,

    设立主键的时候是同时建立聚集索引,

    (9)聚合,

    里面的一些函数的使用,sum....,还有很多的聚合方面的使用,到时候可以查

    (10)旋转,

    2005 里面的pivot ,是分组的多行旋转为一列的情况,分3步执行,

    1 隐式分组,2 隔离值,3 使用集合函数

    而unpivot的功能则相反

    (11)数字辅助表,

    个人认为这个最酷了,可以优化很多的语句,必须在数据库里建一个

    g.l 可以把800M数据库挂上,做一个示例:比如select * from

     (12)存储过程

    主要是已经编译好的,以后就直接拿来使用,所以下次运行的时候不需要重新 编译,它是将多个sql语句快组织到 了一起,触发器是一个特殊的存储过程。

     

    (13)还有null值,这个也很重要,在多表查询的时候就是使用这个来的,还有一些在其他的情况时候也必须清楚。

    空值(null)-什么都没有的值 

      

     空值并不包括零,一个或者多个空格组成的字符串,以及长度的字符串

     

      1)零可以有几个非常广泛的含义,他可以表示一个账目平衡的那种状态,当前可用的头等舱的票的数目,

      或者一个产品的库存水平

     

      2)在SQL中,一个或者多个空格组成的字符串是有着某种含义的,三个空格组成的’   ’和由三个字母组成

      的字符串‘abc’一样有着合法性的。

     

      3)零长度的字符串在某些特定的场合下也是具有一定的意义的。比如在一个雇员表中,一个列MiddleInitial

      的一个长度  的字符串,可能描述的事实是他的名字中没有首字母大写。

     

      4)空值在某些场合非常有用:该列的值不明确的,该列的值未知的,该列的任何可能的值都不能使用某一指定行。

     

      5)空值对数学操作有不利影响:包含所有空值的操作其结果都是空值

     

      6)逻辑操作

     null and null=null,  null and true=null,  null and false=false

     ( null or null )=null,  (null or true )=true,  (null or false)=null

     ( not null) =null

     7) 值为空值的就是那些行所表示的也就是表1和表2的差值,相对于左连接而言的,对于右连接,一次类推。

      可以说检验空值的outer join 是计算2个集合差值的另一种方式。

     8)所有的查询筛选器(on,where,having)都把unkonwn 当作false 处理。

     9)unique约束,排序操作,分组操作把2个null值是相等的。

     (14)还有一个over关键字,这个也很好,可以在排名函数(有3个)里面使用,仅在select 阶段 和order by 阶段可以使用,其他的阶段是不能使用的


  • 相关阅读:
    小技巧
    sql日期函数
    c#发送邮件
    js点滴
    Js序列化时间
    js中string的操作
    原系统中有AD FS , CRM Server ,迁移ADFS 到另一台电脑 , CRM Server用443端口出错
    解决UR 12后ISV目录不能用的问题
    Lucene .Net 版本
    Android 开源项目
  • 原文地址:https://www.cnblogs.com/yupeng/p/1715503.html
Copyright © 2020-2023  润新知