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 阶段可以使用,其他的阶段是不能使用的


原文地址:https://www.cnblogs.com/yupeng/p/1715503.html