摘要: · T-SQL查询处理这种逻辑处理顺序,是理论上的处理过程,实际情况还会根据查询优化器选择最优的执行计划。还是从FROM阶段讲开。(1)FROM阶段 这个阶段是查询逻辑处理的第一步。想到这里,想起了LINQ表达式不就是从FROM开始的嘛,看来还是挺有道理的。FROM阶段负责表示表或要查询的表。如果指定了表运算符,还需 要按从左到右的顺序,对运算符进行逐个处理。表运算符有4类,JOIN,APPLY,PIVOT,UNPIVOT。每个表运算符都有自己的处理规则。这里挑最常见的JOIN来说。对于联接(join),一般有以下几个个步骤:a.求笛卡尔积,对两张表进行cross join,得出最大 阅读全文
posted @ 2011-04-13 04:04 cnby 阅读(2504) 评论(2) 推荐(3) 编辑
摘要: 对于T-SQL编程,用得最广泛的,莫过于查询(Querying)。要想写出高质量、高性能的查询语句,必须深入地了解逻辑查询处理。一、逻辑查询处理的各个阶段(5)SELECT DISTINCT TOP(<top_specification>) <select_list>(1)FROM <left_table> <join_type> JOIN <right_table> ON <on_predicate> (2)WHERE <where_predicate>(3)GROUP BY <group_by_spe 阅读全文
posted @ 2011-04-13 04:02 cnby 阅读(3832) 评论(1) 推荐(2) 编辑
摘要: USE pubsGOSELECT Category = CASE type WHEN 'popular_comp' THEN 'Popular Computing' WHEN 'mod_cook' THEN 'Modern Cooking' WHEN 'business' THEN 'Business' WHEN 'psychology' THEN 'Psychology' WHEN 'trad_cook' THEN 'Traditional 阅读全文
posted @ 2011-04-12 18:23 cnby 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 先看看交叉表什么样子:“交叉表”对象是一个网格,用来根据指定的条件返回值。数据显示在压缩行和列中。这种格式易于比较数据并辨别其趋势。它由三个元素组成: 行 列 摘要字段 “交叉表”中的行沿水平方向延伸(从一侧到另一侧)。在上面的示例中,“手套”(Gloves) 是一行。“交叉表”中的列沿垂直方向延伸(上下)。在上面的示例中,“美国”(USA) 是一列。汇总字段位于行和列的交叉处。每个交叉处的值代表对既满足行条件又满足列条件的记录的汇总(求和、计数等)。在上面的示例中,“手套”和“美国”交叉处的值是四,这是在美国销售的手套的数量。 下面实现一个例子:有一个表:BHGZLBJE---------- 阅读全文
posted @ 2011-04-12 17:50 cnby 阅读(2861) 评论(0) 推荐(0) 编辑
摘要: 连接查询实际上是通过各个表之间共同列的关联性来查询数据的,它是关系数据库查询最主要的特征.select 表1.字段名1,表2.字段名2,... from 表1,表2where 连接条件SQL-92标准所定义的FROM子句的连接语法格式为: FROM 表名 join_type 表名 [ON (连接条件)]连接操作中的ON (连接条件) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。 连接查询分类:1.自连接查询,对同一个表进行连接操作(可以理解为两个不同表的内连接,有时可与嵌套查询等价)2.内连接查询,<又分为:自然连接、等值连接、不等值连接三种>3.外连接查询 阅读全文
posted @ 2011-04-12 02:46 cnby 阅读(42510) 评论(3) 推荐(4) 编辑
摘要: 约束说明如下: create table Persons(id int primary key identity(1,1) , ---主键,自增长 id_p int not null unique CHECK (Id_P>0) --check , --唯一LastName varchar(255) not null , --null FirstName varchar(255),City varchar(255) default 'beijing', --defaultConstraint uc_FullName unique(FirstName,LastName) , 阅读全文
posted @ 2011-04-07 23:36 cnby 阅读(2368) 评论(0) 推荐(0) 编辑
摘要: SQL SELECT INTO 语句可用于创建表的备份复件。简单说明:select filed1,filed2 --要创建的新列into table1 --创建的新表名from table2 --要复制的表where 1=2 --要复制的数据,如果条件不成功则只复制表结构,没有数据从一个以上的表中选取数据也是可以做到的。下面的例子会创建一个名为 "Persons_Order_Backup" 的新表,其中包含了从 Persons 和 Orders 两个表中取得的信息:SELECT Persons.LastName,Orders.OrderNoINTO Persons_Orde 阅读全文
posted @ 2011-04-07 22:54 cnby 阅读(438) 评论(0) 推荐(0) 编辑
摘要: 1案例描述:从题库(保存了所有考试的题目)中抽出一样数量的题做为新的试卷,要求每次的试题顺序不同,这样也就没法抄了啊。 View Code --建立表createtableQuestions(intQuestionIDint,vchQuestionTextvarchar(512))gocreatetableTestQuestions(intQuestionIDint,vchQuestionTextvarchar(512))GO--插入数据declare@intCounterintdeclare@vchQuestionvarchar(64)setnocountonselect@intCounte 阅读全文
posted @ 2011-04-07 22:43 cnby 阅读(2650) 评论(1) 推荐(0) 编辑
摘要: 注意:select 后的字段,必须要么包含在group by中,要么包含在having 后的聚合函数里。1. GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合使用group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面(重要)例如,有如下数据库表:A B 1 abc 1 bcd 1 asdfg如果有如下查询语句(该语句是错误的,原因见前面的原则)select A,B from table group by A 该查询语句的意图是想得到如下结果(当然只是一相情愿) A B abc 1 bcd asdfg 右 阅读全文
posted @ 2011-04-01 17:57 cnby 阅读(246369) 评论(16) 推荐(16) 编辑
摘要: 1:标量子查询(相对于多值子查询):只有标量子查询返回的是单个记录或者不返回,就是有效的子查询。Ex1:select OrderId From Orders where EmployeeId=(select EmployeeId From employees where lastName like N'Davolio')将’Davolio’改为'D%'时,这个时候子查询中返回结果为2行,等号右边此时为多值,查询失败.将’=’改为in谓词.查询才能通过.employees表中无lastname=’jason’,外部查询将返回null.2:非相关子查询(嵌套子查询) 阅读全文
posted @ 2011-04-01 17:10 cnby 阅读(19652) 评论(0) 推荐(0) 编辑