zoukankan      html  css  js  c++  java
  • 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 阶段可以使用,其他的阶段是不能使用的


  • 相关阅读:
    HDU 2844 Coins(多重背包)
    HDU 4540 威威猫系列故事——打地鼠(DP)
    Codeforces Round #236 (Div. 2)
    FZU 2140 Forever 0.5
    HDU 1171 Big Event in HDU(DP)
    HDU 1160 FatMouse's Speed(DP)
    ZOJ 3490 String Successor
    ZOJ 3609 Modular Inverse
    ZOJ 3603 Draw Something Cheat
    ZOJ 3705 Applications
  • 原文地址:https://www.cnblogs.com/yupeng/p/1715503.html
Copyright © 2011-2022 走看看