随笔分类 - 数据库技术
包括MS SQL Server,Oracle等
常用SQL语句
摘要:我们在写sql语句过程中,有些sql是经常需要使用的,比较通用。为此我专门将它们整理出来,以供需要时查询,SQL代码如下。 1 -------------------------一,数据库操作----------------------------- 2 ------------1,创建数据...
阅读全文
alter table的用法
摘要:在数据库开发过程中,除了用得最多的数据库查询外,我们有时也需要去修改数据表的定义,比如在已存在的数据表中新增列和删除列等。这篇文章就总结一下alter table语句的用法。示例代码如下。 1 USE TSQLFundamentals2008; 2 GO 3 4 -- alter table的...
阅读全文
SQL Server遍历表的几种方法
摘要:在数据库开发过程中,我们经常会碰到要遍历数据表的情形,一提到遍历表,我们第一印象可能就想到使用游标,使用游标虽然直观易懂,但是它不符合面向集合操作的原则,而且性能也比面向集合低。当然,从面向集合操作的角度出发,也有两种方法可以进行遍历表的操作,总结起来,遍历表有下面几种方法。使用游标使用表变量使...
阅读全文
如何创建索引
摘要:通过前面二篇文章我们基本学会了如何结合执行计划分析出某Sql语句的性能问题,既然有性能问题的地方已经找到了,接下来就是如何优化查询来提高查询性能,而优化查询最重要的武器就是创建索引,这篇文章就来总结如何创建索引来提高查询速度,主要从以下几个方面来总结。了解索引创建索引的语法结合实例演示如何创建索...
阅读全文
了解Sql Server的执行计划
摘要:前一篇总结了Sql Server Profiler,它主要用来监控数据库,并跟踪生成的sql语句。但是只拿到生成的sql语句没有什么用,我们可以利用这些sql语句,然后结合执行计划来分析sql语句的性能问题,这才是我们的最终目的,那么如何使用执行计划呢?我准备从以下几点来总结。如何启动执行计划执...
阅读全文
SQL Server Profiler教程
摘要:SQL Server Profiler是SQL Server企业版自带的一个sql 语句跟踪和分析工具,功能十分强大。熟练地使用它,对我们分析数据库性能问题很有帮助,比如当数据访问使用EF等ORM框架时,我们经常需要查看它给我们生成的sql语句,然后分析性能问题,我打算从以下几个方面来对它进行总...
阅读全文
合并数据
摘要:在实际项目开发过程中,经常有合并数据的需求。这里合并数据的意思是,对于源表A,目标表B,如果A中存在B中不存在则插入记录,如果A中存在B中也存在则更新记录,如果A中不存在B中存在则删除记录。 为了实现这一需求,我们有两种解决方案,一是传统的处理方法,即使用EXISTS谓词,更新和新增分开处理的...
阅读全文
锁定和阻塞
摘要:锁是事务获取的一种控制资源,用于保护数据资源,防止其它事务对数据进行冲突的或不兼容的访问。我们目前只要学习两种基本的锁模式就可以,它们分别是共享锁和排他锁。共享锁主要是在读操作时使用,读操作一旦完成,数据库就会立即释放资源上的共享锁,而且多个事务可以同时持有同一数据资源上的共享锁。而排他锁主要是...
阅读全文
一个简单的事务
摘要:从这篇开始要总结事务了,我们就从一个简单的事务示例开始吧。下面这个示例首先定义了一个事务,然后把关于一个新订单的数据记录到数据库中。示例代码如下:USE TSQLFundamentals2008;GO-- 事务-- 一个简单的事务BEGIN TRAN;-- 声明一个变量,保存新的OrderIDD...
阅读全文
逆透视转换
摘要:逆透视转换是一种将数据从列的状态转换成行的状态的一种技术。进行逆透视转换一般要经历三个逻辑处理阶段:生成副本,提取元素和删除不相关的交叉。 下面是一个进行逆透视转换的示例。 USE tempdb;
GO -- 逆透视转换(列转行)
-- 准备测试数据
IF OBJECT_ID('dbo.Orders','U') IS NOT NULL DROP TABLE dbo.Orders;
GO...
阅读全文
透视转换
摘要:从这一篇开始要总结的是透视和逆透视,那么什么是透视和逆透视呢?透视是将数据从行的状态转换成列的状态,而逆透视则是将数据从列的状态转换成行的状态。它们一般应用在生成报表的场景中。 每个透视转换都会涉及三个逻辑处理阶段,每个阶段都有相关元素;分组阶段处理相关的分组或行元素,扩展(Spreading)阶段处理相关的扩展或列元素,聚合阶段处理相关的聚合元素和聚合函数。 下面是一个关于透视转换的示例。 ...
阅读全文
EXCEPT差集运算
摘要:EXCEPT差集运算在逻辑上先删除两个输入多集中的重复行,把多集变成集合,然后返回只在第一个集合中出现,在第二个集合中不出现的所有行。可以看下面示意图。下面是一个简单的示例。USE TSQLFundamentals2008;GO-- EXCEPT差集运算-- 以下代码返回属于职员地址,但不属于客...
阅读全文
INTERSECT交集运算
摘要:INTERSECT交集是由既属于集合A,又属于集合B的所有元素组成的集合,如示意图1。 INTERSECT DISTINCT集合运算在逻辑上首先先删除两个输入多集中的重复行,把多集变为集合,然后返回只在两个集合中都出现的行。简单来说,如果一行在两个输入多集中都至少出现一次,那么交集返回的结果中...
阅读全文
视图
摘要:前面讲的两种类型的表表达式(派生表和CTE),它们的作用范围都非常有限,仅限于在单个语句范围内使用,只要包含这些表表达式的外部查询完成操作,它们便随它消失了。这也就意味着派生表和CTE都是不可重用的。 相较于派生表和CTE,视图是一种可重用的表表达式,它定义在数据库中。一旦创建,它就是数据库的...
阅读全文
公用表表达式CTE
摘要:公用表表达式CTE表面上和派生表非常相似,看起来只是语义上的区别。但和派生表比较起来,CTE具有几个优势:第一,如果须要在一个CTE中引用另一个CTE,不需要像派生表那样嵌套,相反,只要简单地在同一个WITH子句中定义多个CTE,并用逗号把它们分隔开。每个CTE可以引用在它前面定义的所有CTE。...
阅读全文
派生表
摘要:从这一篇开始要介绍表表达式了,什么是表表达式呢?表表达式是一种命名的查询表达式,代表一个有效的关系表。可以像其它表一样,在数据处理语句中使用表表达式。SQL Server支持四种类型的表表达式:派生表,公用表表达式,视图和内联表值函数。 派生表(也称为表子查询)是在外部查询的FROM子句中定义...
阅读全文
表类型
摘要:表类型简化了表变量的定义。通过创建表类型,可以把表的定义保存到数据库中,以后在定义表变量,存储过程和用户定义函数的输入参数时,就可以将表类型作为表的定义而重用。下面的示例演示了如何通过表类型来简化表变量的定义,并且如何重用它。USE TSQLFundamentals2008;GOIF TYPE_...
阅读全文
表变量
摘要:表变量和局部临时表非常相似,除了能实现相同的功能外,它们主要有两点不同,首先声明表变量是用DECLARE语句,而不是CREATE TABLE语句,第二点是表变量也只对创建它的会话可见,但允许访问的范围更小,它只对当前批处理可见,它对调用堆栈中当前批处理的内部批处理是不可见的,对会话中随后的批处理...
阅读全文