编程理论,SqlServer2008查询性能优化_第一章

2019-10-14 17:24 来源:未知

图片 1

SQL代表结构化查询语言,是一种在关系数据库系统中查询和管理数据的标准语言。sql语句也有几个类别,包括定义语言(DDL),数据操作语言(DML),数据控制语言(DCL)。

从SQL Server 2005起,SQL Server开始支持窗口函数 (Window Function),以及到SQL Server 2012,窗口函数功能增强,目前为止支持以下几种窗口函数:

 

DDL包括create,alter,drop等语句,DML用于查询和修改包括select,insert,update,delete ,DCL包括 group,revoke。

  1. 排序函数 (Ranking Function) ;

  2. 聚合函数 (Aggregate Function) ;

  3. 分析函数 (Analytic Function) ;

  4. NEXT VALUE FOR Function, 这是给sequence专用的一个函数;

1.集合理论

 

“互异”每一个元素必须唯一,一个教室里,人可以被认为是集合,学生或者教室都可以,因此根据选定不同角色定义不同的集合。

一. 排序函数(Ranking Function)

2.谓词逻辑

帮助文档里的代码示例很全。

谓词可以理解成一个属性,简单点说就是“真”或”假“  但是在开发中又加了一个属性  真,假,null。

排序函数中,ROW_NUMBER()较为常用,可用于去重、分页、分组中选择数据,生成数字辅助表等等;

3.关系模型

排序函数在语法上要求OVER子句里必须含ORDER BY,否则语法不通过,对于不想排序的场景可以这样变通;

确保数据的一致性表示,最小化或者有冗余切不牺牲完整性

drop table if exists test_ranking

create table test_ranking
( 
id int not null,
name varchar(20) not null,
value int not null
) 

insert test_ranking 
select 1,'name1',1 union all 
select 1,'name2',2 union all 
select 2,'name3',2 union all 
select 3,'name4',2

select id , name, ROW_NUMBER() over (PARTITION by id ORDER BY name) as num
from test_ranking

select id , name, ROW_NUMBER() over (PARTITION by id) as num
from test_ranking
/*
Msg 4112, Level 15, State 1, Line 1
The function 'ROW_NUMBER' must have an OVER clause with ORDER BY.
*/

--ORDERY BY后面给一个和原表无关的派生列
select id , name, ROW_NUMBER() over (PARTITION by id ORDER BY GETDATE()) as num
from test_ranking

select id , name, ROW_NUMBER() over (PARTITION by id ORDER BY (select 0)) as num
from test_ranking

4.缺失值

 

一个事件判断不是“真”就是“假” 但却并不能处理所有情况。类似于 把客户的手机号存入数据库字段“ml” 客户可能手机号更换 就意味着缺失 也是第三种关系 对应 null 。

二. 聚合函数 (Aggregate Function)

5.三大范式

SQL Server 2005中,窗口聚合函数仅支持PARTITION BY,也就是说仅能对分组的数据整体做聚合运算;

 1NF:表与行必须是为唯一的,简单点说表正确的表示了关系就符合第一范式。

SQL Server 2012开始,窗口聚合函数支持ORDER BY,以及ROWS/RAGNE选项,原本需要子查询来实现的需求,如: 移动平均 (moving averages), 总计聚合 (cumulative aggregates), 累计求和 (running totals) 等,变得更加方便;

TAG标签:
版权声明:本文由澳门金莎娱乐网站发布于数据库,转载请注明出处:编程理论,SqlServer2008查询性能优化_第一章