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