摘要: HAVING子句用于指定对组进行过滤的谓词或逻辑表达式,这与WHERE阶段对单独的行进行过滤相对应。只有能让HAVING子句中的逻辑表达式为TRUE的组,HAVING阶段才会把这些组返回到下一个逻辑查询处理阶段。逻辑表达式计算结果为FALSE或UNKNOWN的组将被过滤掉。 因为HAVING子句是在对行进行分组后处理的,所以可以在逻辑表达式中引用聚合函数。例如,在下面所示的代码中,HAVING子句使用了逻辑表达式COUNT(*)>1,意味着HAVING阶段过滤器只保留包含多行的组(雇员和订单年份)。 SELECT empid,YEAR(orderdate) AS orderyear,CO 阅读全文
posted @ 2012-09-21 16:50 沙耶 阅读(344) 评论(0) 推荐(0) 编辑
摘要: GROUP BY阶段可以将WHERE逻辑查询处理阶段返回的行按“组”进行组合。每个组由在GROUP BY子句中指定的各元素决定。例如,以下代码所示查询的GROUP BY子句就使用了empid和YEAR(orderdate)元素: SELECT empid,YEAR(orderdate) AS orderyear,COUNT(*) AS numorders FROM Sales.Orders WHERE custid=71 GROUP BY empid,YEAR(orderdate); 这意味着对于WHERE阶段返回的数据中出现的每个雇员ID和订单年份值的唯一组合,在GROUP B... 阅读全文
posted @ 2012-09-21 16:24 沙耶 阅读(759) 评论(0) 推荐(0) 编辑
摘要: 在WHERE子句中,可以指定一个谓词或逻辑表达式,从而过滤由FROM阶段返回的行。只有能让逻辑表达式结果为TRUE的行,才能由WHERE阶段返回给后续的逻辑查询处理阶段。 SELECT orderid,custid,empid,orderdate,freight FROM Sales.Orders WHERE custid=71; 上面这段代码应用了过滤条件custid=71,WHERE阶段将只保留客户ID等于71的行。 WHERE子句对查询性能有重要影响。在过滤表达式的基础上,SQL Server会计算使用什么索引来访问请求的数据。与扫描整个表相比,通过使用索引,有时可以大幅减少... 阅读全文
posted @ 2012-09-21 16:15 沙耶 阅读(251) 评论(0) 推荐(0) 编辑
摘要: FROM子句是在逻辑处理阶段第一个要处理的查询子句。这个子句用于要查询的表名,以及对这些表进行操作的表运算符。应该总是用数据库架构来限定代码中的对象名称。即便你没有显示指定架构名称,SQL Server也一定会隐式地解析它。这样就产生了一些额外的代价,而且如果完全让SQL Server决定使用哪个对象,也容易产生歧义。通过显示指定架构名称,可以保证得到的对象的却是你原来想要的而且还不必付出任何额外的代价。 如果不用任何特殊处理而返回一个表的所有行,所有需要做的就是使用一个带有FROM子句的查询,在FROM子句中指定想要查询的表名,在SELECT子句中指定想要返回的各个属性。例如以下语句查... 阅读全文
posted @ 2012-09-21 15:29 沙耶 阅读(311) 评论(0) 推荐(0) 编辑
摘要: SELECT语句的目的是对表进行查询、应用一定的逻辑处理,并返回结果。注意,这里的“逻辑查询处理”是指ANSI SQL定义的概念模型,规定了如何处理一个查询,以及如何取得最终的结果。Microsoft SQL Server引擎并不教条地严格遵守逻辑查询处理;相反,在物理地处理一个查询时,它可以自由地调整处理阶段的顺序,只要最终的结果能够和逻辑查询处理的规定保持一致。SQL Server可以(事实上经常)在查询的物理处理中采用很多快捷方式。 我们使用以下代码来描述逻辑查询处理和各种SELECT查询字句:USE TestDB SELECT empid,YEAR(orderdate) AS ... 阅读全文
posted @ 2012-09-21 14:44 沙耶 阅读(444) 评论(0) 推荐(0) 编辑
摘要: 关系模型带来的最大优点之一就是模型本身集成了数据完整性。作为模型的一部分而实施的数据完整性(也就是说,作为表定义的一部分)称为声明式(declarative)数据完整性。用代码来实施的数据完整性(例如,用存储过程或触发器)称为过程式(procedural)数据完整性。 为属性选择的数据类型和是否允许为NULL值,甚至数据模型本身都是声明式数据完整性约束的例子。其他声明式约束包括主键、唯一约束(UNIQUE)、外键、检查约束(CHECK),以及DEFAULT约束。当用CREATE TABLE语句创建表时,可以同时定义这些约束;或者在已经创建好表之后,用ALTER TABLE语句增加这些约束... 阅读全文
posted @ 2012-09-21 09:02 沙耶 阅读(1299) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示