01 2012 档案

摘要:关系数据库的起源起源于数学中的集合概念,所以集合和集合之间,也同样继承了数学集合之间的运算,而对于在关系数据库中,常常用于两个数据库中并没有直接的关系数据库的”关系“,比如外键,但两个数据集会有间接的关系,比如两届比赛,参加比赛人员集合之间会有间接的关系。 在T-SQL中,关系运算实际上可以分为四类,首先看我们举例子用的表:这里的例子表分别为两个不同会以参加的人员记录,分别为Meeting1和Meeting2如下:关系运算的具体可以分为以下四类:1.A∩B,既是所求数据集既在A中,又在B中 在实例表中,实际的例子为即参加第一个会以,有参加第二个会以人的集合,如下图:2.A∪B,既所求数据在数. 阅读全文
posted @ 2012-01-31 17:47 指尖流淌 阅读(782) 评论(0) 推荐(1) 编辑
摘要:变量对于某一种语言是必不可少的一部分,当然对于T-SQL来讲也是一样,在简单查询中,但是对于复杂的查询或存储过程中,变量都是必不可少的一部分。和高级语言一样,在T-SQL中,变量按生存范围可以分为全局变量(Global Variable)和局部变量(Local Variable)1、全局变量时有系统定义的,在整个SQL Server实例内都能访问到的变量,全部变量以@@作为第一个字符,用户只能访问,不能赋值。2、局部变量由用户定义,生命周期只在一个批处理内有效。局部变量以@作为第一个字符,由用户自己定义和赋值。一个简单的例子如下: 因为全局变量仅仅是用于读取系统的一些参数,具体每个全局变量所. 阅读全文
posted @ 2012-01-31 16:34 指尖流淌 阅读(1178) 评论(0) 推荐(0) 编辑
摘要:和其他高级语言一样,T-SQL中也有用于控制流程的语句。T-SQL中的流程控制语句进一步扩展了T-SQL的力量....使得大部分业务逻辑都可以用在数据库层里面进行。但很多对于T-SQL中的流程控制语句并没有系统的了解 在没有流程控制语句的情况下,T-SQL语句是按照从上到下的顺序逐个执行;使用流程控制语句可以让开发人员可以基于某些逻辑进行选择性的跳转,实现了类似高级语言的跳转结构流程控制语句的使用范围和Go关键字 流程控制语句只能在单个批处理段(Batch),用户自定义函数和存储过程中使用。不能跨多个批处理段或者用户自定义函数和存储过程。 一个批处理段是有一个或者多个语句组成的一个批处理,之. 阅读全文
posted @ 2012-01-31 15:28 指尖流淌 阅读(1131) 评论(0) 推荐(0) 编辑
摘要:T-SQL不仅仅是一个用于查询数据库的语言,还是一个可以对数据进行操作的语言。基于列的case表达式就是其中一种,不像其他查询语言可以互相替代(比如用子查询实现的查询也可以使用join来实现),case表达式在控制基于列的逻辑表达式大部分是无法替代的。 基于列的逻辑表达式,其实就是case表达式,可以用在select,update,delete,set以及in,where,order by和having子句之后。由于这里讲的是T-SQL查询,所以只说到case表达式在select子句和order by子句中的使用。 case表达式实现的功能类似编程语言中的if....then....else. 阅读全文
posted @ 2012-01-31 12:29 指尖流淌 阅读(628) 评论(0) 推荐(0) 编辑
摘要:SQL有着非常强大且灵活的查询方式,而多表连接操作往往也可以用子查询进行替代,子查询本质上是嵌套进其他select,update,insert,delete语句的一个被限制的select语句,在子查询中,只有下面几个子句可以使用1、select子句(必须)2、from子句(必须)3、where子句(可选)4、group by(可选)5、having(可选)6、order by(只有在top关键字被使用时才可用)子查询可以嵌套在其他子查询中,这个嵌套最多可以达到32层。子查询也叫内部查询(inner query)或者内部选择(innder select),而包含子查询的查询语句也叫外部查询(o. 阅读全文
posted @ 2012-01-29 22:41 指尖流淌 阅读(12756) 评论(0) 推荐(1) 编辑
摘要:sql server 2008提供了一个增强的Sql命令Merge,用法参看MSDN。能根据两张表数据的不同,对两张表进行数据执行插入,更新或删除等操作,一般用在数据的抽取,例如,根据在另一个表中找到的差异在一个表中插入、更新或删除行,可以对两张表数据进行同步。看例子,假如,有一总产品列表,一个分店产品列表,需要从分店添加产品时更新产品列表。总产品表,分店产品表结构完全一致:if OBJECT_ID('Demo_AllProducts')is not null drop table Demo_AllProductsgoCreate table Demo_AllProducts( 阅读全文
posted @ 2012-01-29 18:35 指尖流淌 阅读(445) 评论(0) 推荐(0) 编辑
摘要:在SQL Server 2008中新增功能,可以使用单个insert命令插入多行举例:CREATE TABLE [dbo].[test2]( [编号] [int] NULL, [姓名] [varchar](20) NULL, [一季度] [int] NULL, [二季度] [int] NULL, [三季度] [int] NULL, [四季度] [int] NULL) insert into test2(编号,姓名,一季度,二季度,三季度,四季度)values(1,'a1',1,1,1,1),(2,'a2',2,2,2,2),(2,'a3',3,3 阅读全文
posted @ 2012-01-29 17:33 指尖流淌 阅读(371) 评论(0) 推荐(0) 编辑
摘要:SQL Server查询1、查询的时候应该尽量按照复合索引中的顺序来做条件查询;2、如果在程序中有for或者是freach,在存储过程中又有if exist,那就要看是否可以再表中加入复合索引了,if not exists可以转换为if exists来使用索引;3、在查询尽量少使用*或者全表字段来查询。第一,返回的数据集比较大;第二,产生更多的IO操作;第三,会使用到Bookmarklookup的查询计划,性能有所下降;如果能使用覆盖索引来查询是最理想的。4、下面关于查询的性能比较1、返回行数较多:索引覆盖>聚集索引>表扫描>堆积的非聚集索引>聚集的非聚集索引2、返回行 阅读全文
posted @ 2012-01-29 17:02 指尖流淌 阅读(384) 评论(0) 推荐(0) 编辑
摘要:游标1、尽量少用游标,如果不得不用,那就要看是否可以对逻辑进行整合,分出不同的情况,让在一部分情况是使用Insert select的方式来一次性插入(注意下例中的业务分析,这个是关键)2、如果存储过程花费的时间比较长,而且无法避免使用游标,那我们就要分析系统的业务,看大部分的情况是走哪条路的,那我们对大部分会发生的事做优化,也是可以达到我们优化的目的的;(比如IXC发起的时候在insert到tb Todo表中都要先判断tbTodo是否存在数据的,那把部分情况是不存在的,那我们就一次性判断count,如果没有就使用Insert select一次性插入到tb Todo)转自http://gaiza 阅读全文
posted @ 2012-01-20 21:09 指尖流淌 阅读(328) 评论(0) 推荐(0) 编辑
摘要:1、查询的时候尽量按照复合索引的顺序来做条件查询,(比如IXC中spInterActiveInstance_GetByIDToStat条件and ProcessState<>99的位置)2、如果在程序中有For或者Foreach,在存储过程中又有If Exists,那么就要看是否可以再表中加入复合索引了,If Not Exists可以转换为If Exists来使用索引;3、在查询中尽量少使用*或者全表字段来查询数据。第一、返回的数据集比较大;第二,产生更多的IO操作,第三,会使得Bookmarklookup的查询计划,性能有所下降;如果能使用到覆盖索引来查询是最理想的。4、下面关于 阅读全文
posted @ 2012-01-20 21:00 指尖流淌 阅读(313) 评论(0) 推荐(0) 编辑
摘要:索引1、复合索引(where a and b)如果没有对a和a做单一索引,查询的时间为a;如果对a做单一索引,查询时间为b;如果对b做单一索引,查询时间为c;如果对a,b做复合索引,查询时间为d,那么时间的比较就应该是a>b=c>d;(比如spMsgreader_Distribute中使用where inforID=@infoID and UserID=@userID,插入7000次的时候就明显的看到性能了;(8秒:1:50秒)注意升序和降序的区别?)2、当高选择性的非聚集索引达到5%的选择性时,该索引时非常有用的3、关于复合索引属性列位置问题,应该把高选择性的列放在坐左边(以前就 阅读全文
posted @ 2012-01-20 20:45 指尖流淌 阅读(394) 评论(2) 推荐(0) 编辑
摘要:create table site_user ( id int IDENTITY(1,1) PRIMARY KEY, [name] varchar(20), code varchar(20), date datetime )用索引实现数据优化,一个基本的了解,参照http://www.cnblogs.com/gaobanana/archive/2012/01/16/2323967.html1、建表create table site_user ( id int IDENTITY(1,1) PRIMARY KEY, [name] varchar(20), c... 阅读全文
posted @ 2012-01-18 22:46 指尖流淌 阅读(498) 评论(0) 推荐(0) 编辑
摘要:快过年了,工作不怎么忙,闲来无事,把BI中客户端显示用silverlight图表实现了一下,思路还是老一套,ado.net读取数据,wcf推送数据,silverlight显示。不废话,晒解决方案为了最大化减少数据的传输量,我们采取服务端集中抓取数据,然后客户端用linq实现数据筛选,重新定义显示实体类,实现数据绑定服务端同样新建一个实体类,根据返回的数据集合 // 使用下面示例中说明的数据约定将复合类型添加到服务操作。 [DataContract] public class ProjectDistributed { [DataMember] p... 阅读全文
posted @ 2012-01-18 21:56 指尖流淌 阅读(704) 评论(0) 推荐(0) 编辑
摘要:锁的分类锁的类别有两种分法:1、从数据库系统的角度看:分为独占锁(即排它锁),共享锁和更新锁MS SQL Server使用一下资源锁形式锁模式描述共享(S)用于不更改或不更新数据的操作(只读操作),如select更新(U)用于可更新的资源中,。防止当多个回话在读取、锁定以及随后可能进行的资源更新时发生常见形式的死锁。排它(X)用于数据库修改操作,例如Insert、update或delete。确保不会同时统一资源多重更新。意向锁,用于建立锁的层次结构,意向锁的类型为:意向共享(IS)、意向排他(IX)以及意向排他共享(SIX)。架构锁 在执行依赖于表架构的操作时使用,架构所的类型为:架构修改(S 阅读全文
posted @ 2012-01-14 23:53 指尖流淌 阅读(505) 评论(1) 推荐(0) 编辑
摘要:/* 连接数 */select connectnum=count(distinct net_address)-1 from master..sysprocesses/* 返回一组有关计算机和有关 SQL Server 可用资源及其已占用资源的有用杂项信息 */select * from sys.dm_os_sys_info/* 从操作系统返回内存信息 */select * from sys.dm_os_sys_memory/* 返回有关调用进程的虚拟地址空间中的页范围的信息 */select * from sys.dm_os_virtual_address_dump/* 命令提供了SQL Se 阅读全文
posted @ 2012-01-14 23:36 指尖流淌 阅读(1023) 评论(0) 推荐(0) 编辑
摘要:select row_number() over(排序条件,必不可少),字段名(也可以是*) from 表名select row_number() over(order by id asc),id,name from table1我们可以应用此进行简单的分页。例如:select * from test我们查询3行数据 SELECT A.* FROM ( SELECT ROW_NUMBER() over (order by [编号] desc) as RowNumber,* FROM test ) A WHERE RowNumber > 2 and R... 阅读全文
posted @ 2012-01-14 23:25 指尖流淌 阅读(6833) 评论(0) 推荐(0) 编辑
摘要:在做报表时,经常需要将数据表中的行转列,或者列转行,如果不知道方法,你会觉得通过SQL语句来实现非常难。这里,我将使用Pivot和unpivot来实现看似复杂的功能。这个功能在SQL2005及以上版本才有。MSDN解释:可以使用PIVOT和UNPIVOT关系运算符将表值表达式更改为另一个表。PIVOT通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出所需的任何其余列值执行聚合。Unpivot与pivot执行相反的操作,将表值表达式的列转换为列值,但是在实际应用中,有些聚合之后的数据很难进行拆分。所以,unpivot并非pivot的逆过程。pivot提供的语法 阅读全文
posted @ 2012-01-13 12:18 指尖流淌 阅读(790) 评论(0) 推荐(0) 编辑
摘要:众所周知的几个结果集集合操作命令,今天详细地测试了一下,发现一些问题,记录备考。假设我们有一个表Student,包括以下字段与数据:drop table student; create table student(id int primary key,name nvarchar2(50) not null,score number not null);录入数据insert into student values(1,'Aaron',78);insert into student values(2,'Bill',76);insert into student va 阅读全文
posted @ 2012-01-12 12:42 指尖流淌 阅读(568) 评论(0) 推荐(0) 编辑
摘要:case具有两种格式。简单case函数和case搜索函数,也就是说既能实现多条件分析,又能实现语句搜索。点滴---简单的case函数,即多条件分析case sex when '1' then '男' when '0' then '女' else '其他' end---case 查询功能case when sex='1' then '男' when sex='0' then '女' else '其他' end 这两种方式,可以实现相同的功 阅读全文
posted @ 2012-01-12 10:38 指尖流淌 阅读(3371) 评论(0) 推荐(1) 编辑
摘要:文章转自:http://www.cnblogs.com/CareySon/archive/2011/05/18/2049727.html引言在前两篇文章中,对于单表查询和多表查询的概念做出了详细的介绍,在本篇文章中会主要介绍聚合函数的使用和数据的分组.简介简单的说,聚合函数是按照一定的规则将多行(Row)数据汇总成一行的函数。对数据进行汇总后,可以按照特定的列(column)将所汇总的其他列进行分组(Group by),并可以在再次给定条件进行筛选(Having).聚合函数将多行数据进行汇总的概念可以简单用下图解释:简单聚合函数简单聚合函数是那些拥有很直观将多行(Row)汇总为一行(Row)计 阅读全文
posted @ 2012-01-02 22:57 指尖流淌 阅读(542) 评论(0) 推荐(1) 编辑
摘要:本篇文章中,主要说明SQL中各种连接以及使用范围,以及更进一步的理解关系代数法和关系演算法对在同一条件查询的不同思路。多表连接简介 在关系数据库中,一个查询往往会涉及多个表,因为很少有数据库只有一张表,而如果大多查询只涉及到一个表的,那么那个表也往往低于第三范式,存在大量冗余和异常。 因为连接(join)就是一种把多个表连接成一个表的重要手段。比如简单两个表连接学生表和班级表,如图:进行连接后如图:笛卡尔积 迪科尔积在SQL中的实现方式即使交叉连接。所有的连接方式都会先生成一个临时笛卡尔积表,笛卡尔积是关系代数里面的一个概念,表示两个表中的每一行数据任意组合,上图中两个表连接即为笛卡尔积(交. 阅读全文
posted @ 2012-01-02 18:36 指尖流淌 阅读(719) 评论(0) 推荐(0) 编辑
摘要:SQL语言是一门简单易学却又功能强大的语言,它能让你快速上手并写出比较复杂的查询语句。但对于大多数开发者来说,使用SQL查询数据库并没有一个抽象的过程和一个合理的步骤,这很可能会使在写一些特定的SQL查询语言来解决特定问题时被"卡"住,本系列文章主要讲述SQL查询时一些基本理论,以及写查询语句的抽象思路。sql查询简介 SQL语言起源于1970年E.J.Codd发表的关系数据库理论,所以SQL是为了关系数据库服务的。而对于SQL查询是指从数据库中取得数据的子集,这句话貌似听着有些晦涩是吧,下面通过几张图简单的说一下: 假如一个数据库中只有一个表,再假如所有数据如下图而对于子 阅读全文
posted @ 2012-01-01 23:04 指尖流淌 阅读(812) 评论(0) 推荐(0) 编辑
摘要:文章转自:http://www.cnblogs.com/CareySon/archive/2010/02/16/1668803.html简介: 数据库范式在数据库设计中的地位一直很暧昧,教科书中对于范式倒是都给出了学术性的定义,但在实际引用中范式的应用却不甚乐观,这篇文章会用简单的语言和一个简单的数据库DEMO将一个不符合范式的数据库一步步动第一范式实现到第四范式。范式的目标: 应用数据库范式可以带来许多好处的,但是重要的好处归结为三点: 1、减少数据冗余(这是主要的好处,其他好处都是由此而附带的) 2、消除异常(插入异常、更新异常、删除异常) 3、让数据组织的更加和谐 但剑是双刃的,应用数据 阅读全文
posted @ 2012-01-01 20:23 指尖流淌 阅读(491) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示