排序规则是字符数据的一个属性,封装了几个方面的特性,包括多语言支持(和Unicode类型有关,因为它支持所有语言)、排序规则、区分大小写、区分重音,等等。要得到系统中目前支持的所有排序规则极其描述,可以查询表函数fn_helpcollations,如下所示:[代码] 例如,排序规则Latin1_General_CI_AS表示:Latin1_General 支持的语言是英语。字典排序 基于字典顺序对字符数据进行排序和比较('A'和'a''B'和'b')。这一排序规则之所以采用字典顺序,是因为当没有显示地定义任何排序规则时,就默认使用字典顺序(更确切地说,排序规则名称中没有显示地出现BIN Read More
SQL Server支持两种字符数据类型——普通字符和Unicode字符。普通字符数据类型包括CHAR和VARCHAR,Unicode字符数据类型包括NCHAR和NVARCHAR。它们二者的区别是:普通字符使用一个字节(byte)来保存每个字符,而Unicode字符则需要两个字节。当使用普通字符类型时,由于一个列只用一个字节来保存每个字符,所以就限制在这个列中只能使用英语这一语言,因为一个字节只能代表256(2^8)个不同的字符。一个列所支持的语言是由列的有效排序规则(collation)属性决定的。当使用Unicode数据类型时,一个列可以代表65535(2^16)个不同的字符,因为这时用两 Read More
SQL支持一种所谓的同时操作的概念,其含义是认为在同一逻辑查询处理阶段中出现的所有表达式都是同时进行计算的。 例如,这个概念就可以解释为什么不能在SELECT子句中引用为同一SELECT子句中的列分配的别名,即使直觉上看起来应该能够这么做。考虑以下查询:[代码] 以上SELECT列表中第三个表达式对orderyear这一列名的引用是无效的,即使引用表达式位于这个别名的定义“之后”。因为从逻辑上来说,SELECT列表中各表达式的计算是没有顺序的——它们只是一组表达式。在逻辑上SELECT列表中的所有表达式都是在同一时刻进行计算的。因此该查询会生成以下输出:[代码] 再举一个与同时操作有关的 Read More
SQL支持用NULL符号来表示缺少的值,它使用的是三值谓词逻辑,这意味着谓词的计算结果可以是TRUE、FALSE或UNKNOWN(未知)。 T-SQL在这方面遵循了标准。在SQL中处理NULL和UNKNOWN可能非常容易让人困惑,因为人们在直觉上更习惯于用二值逻辑(TRUE、FALSE)来进行思考。更为添乱的是,SQL中不同语言元素处理NULL和UNKNOWN的方式也有所不同。我们先从三值谓词逻辑说起。如果逻辑表达式只涉及已经存在的值,那么最终的计算结果要么为TRUE,要么为FALSE;但是当逻辑表达式涉及缺少的值时,其计算结果就是UNKNOWN。例如,考虑谓词salary 0;当sal Read More
CASE表达式是一个标量表达式,它基于条件逻辑来返回一个值。注意,CASE是一个表达式,而不是一条语句;也就是会所,不能用它来控制活动的流程,也不能根据条件逻辑来做某些处理。相反,它只是根据条件逻辑来返回某个值。因为CASE是一个标量表达式,所以它可以支持任何标量表达式(如SELECT、WHERE、HAVING,以及ORDER BY子句)、CHECK约束,等等。 CASE表达式有两种格式:简单表达式和搜索表达式。CASE简单格式将一个值(或一个标量表达式)与一组可能的取值进行比较,并返回第一个匹配的结果。如果列表中没有值等于测试值,CASE表达式就返回其ELSE子句(如果存在)中列出的值。如 Read More
T-SQL有几种不同的语言元素可以指定逻辑表达式,例如,查询过滤器(WHERE和HAVING)、CHECK约束,等等。在逻辑表达式中可以使用各种谓词(取值为TRUE、FALSE或UNKNOWN的表达式)和运算符。 T-SQL支持的谓词包括IN、BETWEEN,以及LIKE等。IN这个谓词用于检查一个值(或标量表达式)是否与一组元素中的至少一个相等。例如,以下查询返回订单ID等于10248、或10249、或10250的订单:[代码] BETWEEN这个谓词用于检查一个值是否在指定的范围内,包括两个指定的边界值。例如,以下查询返回订单ID在10300到10310之间的所有订单:[代码] LI Read More
OVER子句用于为行为定义一个窗口(windows),以便进行特定的运算。可以把行的窗口简单地认为是运算将要操作的一个行的集合。例如,聚合函数和排名函数都是可以支持OVER子句的运算类型。由于OVER子句为这些函数提供了一个行的窗口,所以这些函数也称之为开窗函数。 聚合函数的要点就是要对一组值进行聚合,聚合函数传统上一直以GROUP BY查询作为操作的上下文。在前面的“GROUP BY”子句的讨论中,我们知道在对数据进行分组以后,查询为每个组只返回一行;因此,也就是要限制所有的表达式为每个组只能返回一个值。 聚合开窗函数使用OVER子句提供窗口作为上下文,对窗口中的一组值进行操作,而不是使 Read More