摘要: SQL支持一种所谓的同时操作的概念,其含义是认为在同一逻辑查询处理阶段中出现的所有表达式都是同时进行计算的。 例如,这个概念就可以解释为什么不能在SELECT子句中引用为同一SELECT子句中的列分配的别名,即使直觉上看起来应该能够这么做。考虑以下查询:1 SELECT orderid,YEAR(orderdate) AS orderyear,orderyear +1AS nextyear2 FROM Sales.Orders; 以上SELECT列表中第三个表达式对orderyear这一列名的引用是无效的,即使引用表达式位于这个别名的定义“之后”。因为从逻辑上来说,SELECT列表中各... 阅读全文
posted @ 2012-09-24 17:30 沙耶 阅读(418) 评论(0) 推荐(0) 编辑
摘要: SQL支持用NULL符号来表示缺少的值,它使用的是三值谓词逻辑,这意味着谓词的计算结果可以是TRUE、FALSE或UNKNOWN(未知)。 T-SQL在这方面遵循了标准。在SQL中处理NULL和UNKNOWN可能非常容易让人困惑,因为人们在直觉上更习惯于用二值逻辑(TRUE、FALSE)来进行思考。更为添乱的是,SQL中不同语言元素处理NULL和UNKNOWN的方式也有所不同。我们先从三值谓词逻辑说起。如果逻辑表达式只涉及已经存在的值,那么最终的计算结果要么为TRUE,要么为FALSE;但是当逻辑表达式涉及缺少的值时,其计算结果就是UNKNOWN。例如,考虑谓词salary > 0;当s 阅读全文
posted @ 2012-09-24 17:26 沙耶 阅读(1268) 评论(0) 推荐(0) 编辑
摘要: CASE表达式是一个标量表达式,它基于条件逻辑来返回一个值。注意,CASE是一个表达式,而不是一条语句;也就是会所,不能用它来控制活动的流程,也不能根据条件逻辑来做某些处理。相反,它只是根据条件逻辑来返回某个值。因为CASE是一个标量表达式,所以它可以支持任何标量表达式(如SELECT、WHERE、HAVING,以及ORDER BY子句)、CHECK约束,等等。 CASE表达式有两种格式:简单表达式和搜索表达式。CASE简单格式将一个值(或一个标量表达式)与一组可能的取值进行比较,并返回第一个匹配的结果。如果列表中没有值等于测试值,CASE表达式就返回其ELSE子句(如果存在)中列出的值... 阅读全文
posted @ 2012-09-24 16:04 沙耶 阅读(1756) 评论(0) 推荐(0) 编辑
摘要: T-SQL有几种不同的语言元素可以指定逻辑表达式,例如,查询过滤器(WHERE和HAVING)、CHECK约束,等等。在逻辑表达式中可以使用各种谓词(取值为TRUE、FALSE或UNKNOWN的表达式)和运算符。 T-SQL支持的谓词包括IN、BETWEEN,以及LIKE等。IN这个谓词用于检查一个值(或标量表达式)是否与一组元素中的至少一个相等。例如,以下查询返回订单ID等于10248、或10249、或10250的订单:1 SELECT orderid,empid,orderdate2 FROM Sales.Orders3 WHERE orderid IN(10248,10249,10... 阅读全文
posted @ 2012-09-24 15:41 沙耶 阅读(679) 评论(0) 推荐(0) 编辑
摘要: OVER子句用于为行为定义一个窗口(windows),以便进行特定的运算。可以把行的窗口简单地认为是运算将要操作的一个行的集合。例如,聚合函数和排名函数都是可以支持OVER子句的运算类型。由于OVER子句为这些函数提供了一个行的窗口,所以这些函数也称之为开窗函数。 聚合函数的要点就是要对一组值进行聚合,聚合函数传统上一直以GROUP BY查询作为操作的上下文。在前面的“GROUP BY”子句的讨论中,我们知道在对数据进行分组以后,查询为每个组只返回一行;因此,也就是要限制所有的表达式为每个组只能返回一个值。 聚合开窗函数使用OVER子句提供窗口作为上下文,对窗口中的一组值进行操作,而不... 阅读全文
posted @ 2012-09-24 10:37 沙耶 阅读(2033) 评论(0) 推荐(0) 编辑
摘要: TOP选项是T-SQL特有的,用于限制查询返回的行数或百分比。当在查询中指定了ORDER BY子句时,TOP将依赖该子句来定义行和逻辑优先顺序。例如,如果要从Orders表返回最近的5个订单,则可以在SELECT子句中指定TOP(5),并在ORDER BY子句中指定orderdate DESC,如以下代码:1 SELECTTOP(5) orderid,orderdate,custid,empid2 FROM Sales.Orders3 ORDERBY orderdate DESC; 从逻辑查询处理的角度来看,TOP选项是作为SELECT阶段的一部分而处理的,紧接着DISTINCT子句处理... 阅读全文
posted @ 2012-09-24 10:19 沙耶 阅读(522) 评论(0) 推荐(0) 编辑
摘要: 需要达到的几个基本特性:1)程序启动能够自动检测版本,并自动下载新版本程序;2)下载过程,应考虑中断情况,不能导致下次启动的任何无法运行的故障;3)下载要考虑自动修复模式,即用户可以点击“重新下载”,相当于覆盖安装一次。4)升级的数据最好是压缩过的,下载后解压,减少数据流量。5)文件需要MD5签名,方便比较,未改变的文件无需重复下载。6)考虑制作发布版本的方便性,应该具备一个生成发布包的工具。7)发布到服务器站点时,要考虑防止发布过程影响到正在使用中的客户。(考虑最后更改服务器上的当前版本配置文件,指向最新的发布目录)8)要考虑升级检测程序自身的更新(建议使用之前跟你讨论过的复制运行副本模式) 阅读全文
posted @ 2012-09-24 10:15 沙耶 阅读(357) 评论(0) 推荐(0) 编辑
摘要: ORDER BY子句用于展示数据时对输出结果中的行进行排序。从逻辑查询处理来看,ORDER BY是最后处理的一个子句。下面的代码按照雇员ID和订单年份对输出结果进行排序:1 SELECT empid,YEAR(orderdate) AS orderyear,COUNT(*) AS numorders2 FROM Sales.Orders3 WHERE custid =714 GROUPBY empid,YEAR(orderdate)5 HAVINGCOUNT(*) >16 ORDERBY empid,orderyear; 理解SQL最重要的一点就是要明白表不保证是有序的,因为表是为了代表 阅读全文
posted @ 2012-09-24 09:47 沙耶 阅读(1218) 评论(0) 推荐(0) 编辑
摘要: SELECT子句用于指定需要在查询返回的结果集中包含的属性(列)。SELECT列表中的表达式可以直接基于正在查询的表的各个列,也可以在此基础上做进一步的处理。例如,在前面的代码中的SELECT列表就包含以下表达式:empid、YEAR(orderdate)、COUNT(*)。如果表达式直接引用了某个列(如empid),那么目标列的名称默认与原始列的名称一样。也可以选择为目标列分配自定义的名称,为此要使用AS子句(例如,empid AS employee_id)。当在表达式中进行了一定的处理(例如,YEAR(orderdate)),或者没有基于原始表的列(如调用CURRENT_TIMESTA.. 阅读全文
posted @ 2012-09-24 09:30 沙耶 阅读(3708) 评论(0) 推荐(0) 编辑