SQL SERVER技术内幕之4 子查询】的更多相关文章

最外层查询的结果集会返回给调用者,称为外部查询.内部查询的结果是供外部查询使用的,也称为子查询.子查询可以分成独立子查询和相关子查询两类.独立子查询不依赖于它所属的外部查询,而相关子查询则须依赖它所属的外部查询.子查询的期望值可以是单值的.多值的或以表为值. 1.独立子查询 独立子查询是独立于其外部查询的子查询.在逻辑上,独立子查询在执行外部查询之前只要先执行一次,接着外部查询再使用子查询的结果继续进行查询. 1.1 独立标量子查询 标量子查询是返回单个值的子查询,标量子查询可以出现在外部查询中…
1.定义 集合运算会对两个输入查询的结果集进行逐行比较,根据比较结果和所使用的集合运算来确定某一行是否应该包含在集合运算的结果中.因为集合运算是针对集合之间进行的计算,所以集合运算涉及的两个查询不能包含Order By子句.包含Order By子句的查询可以确保结果的排列顺序,因此,这样的查询返回的不是集合,而是游标. ANSI SQL对每种集合运算都支持两个选项:DISTINCT(默认值)和ALL,DISTINCT逻辑上可以从两个输入的多集中消除重复的行,然后返回一个集合.ALL对两个多集进行…
JOIN表运算符对两个输入表进行操作.联接有三种基本类型:交叉联接.内联接和外联接.这三种联接的区别是它们采用的逻辑查询处理步骤各不相同,每种联接都有一套不同的步骤.交叉联接只有一个步骤----笛卡尔积;内联接有两个步骤----笛卡尔积.过滤;外联接有三个步骤----笛卡尔积.过滤.添加外部行. 3.1 交叉联接 SQL SERVER支持交叉联接的两种标准语法:ANSI SQL-92和ANSI SQL-89,推荐使用SQL-92的语法. 3.1.1 ANSI SQL-92语法 SELECT C.…
SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnblogs.com/lyhabc/articles/3914213.html Microsoft SQL Server 2005技术内幕:T-SQL查询笔记http://www.cnblogs.com/lyhabc/articles/3912608.html Microsoft SQL Server 2…
这个月碰到几个人问我关于"SQL SERVER中INNER JOIN 与 IN两种写法的性能孰优孰劣?"这个问题.其实这个概括起来就是SQL Server中INNER JOIN与子查询孰优孰劣(IN是子查询的实现方式之一,本篇还是只对比INNER JOIN与子查询IN的性能,如果展开INNER JOIN与子查询性能对比,范围太大了,没法一一详述).下面这篇文章,我们就INNER JOIN与子查询IN这两种写法孰优孰劣,在不同场景下进行一下测试对比一下,希望能解答你心中的疑惑. 下面例子…
概述 子查询的概念: 当一个查询是另一个查询的条件时,称之为子查询.子查询可以嵌套在主查询中所有位置,包括SELECT.FROM.WHERE.GROUP BY.HAVING.ORDER BY. 外面的查询成为父查询,圆括号嵌入的查询成为称为子查询.SQL  Server  执行时,先执行子查询部分,求出子查询部分的值,再执行整个父查询,返回最后的结果. 查看多表的数据也可使用表连接,表连接(join   on...),表连接都可用子查询替换,但有的子查询不能用表连接替换,子查询比较灵活,方便,形…
一.变量 变量用于临时保存数据值,以供在声明它们的同一批处理语句中引用.例如,以下代码先声明一个数据类型为INT的变量@i,再将它赋值为10; DECLARE @i as INT; SET @i = ; SQL SERVER 2008新增加了对在同一语句中同时声明和初始化变量的支持,如下所示: DECLARE @i ; 可以使用一个DECLARE语句同时声明多个变量,但是SET语句只能对一个变量进行操作,所以如果需要把值赋值给多个变量,就必须使用多个SET语句.当从同一行取出多个列的值时,这可能…
表表达式是一种命名的查询表达式,代表一个有效的关系表.可以像其他表一样,在数据处理语句中使用表表达式.SQL Server支持4种类型的表表达式:派生表(derived table).公用表表达式(CTE,common table expression).视图以及内联表值函数(inline TVF,inline table-valued function). 表表达式并不是物理上真实存在的什么对象,它们是虚拟的.对于表表达式的查询在数据库引擎内部都将转换为对底层对象的查询.使用表表达式的好处通常…
1.事务 1.1事务的定义 事务是作为单个工作单元而执行的一系列操作.定义事务边界有显式和隐式两种.显式事务的定义以BEGIN TRAN作为开始,以COMMIT TRAN提交事务,以ROLLBACK TRAN撤销事务.如果不显式定义事务的边界,SQL Server会默认把每个单独的语句作为一个事务.也就是说,SQL Server默认在执行完每个语句之后就自动提交事务.可以通过IMPLICIT_TRANSACTIONS会话选项来改变SQL Server处理隐式事务的方式. 1.2事务的属性 (1)…
分组集就是分组(GROUP BY子句)使用的一组属性,在传统的SQL中,一个聚合查询只能定义一个分组集: 假设现在不想生成4个单独的结果集,而是希望生成一个统一的结果集,其中包含所有4个分组集的聚合 数据,下面是经过调整后的代码: 虽然设法得到了期望的结果,但这种解决方案存在两个主要 问题:代码长度和性能. 1.GROUPING SETS从属子句 借助该从属子句,就可以在同一查询中定义多个分组集.只要简单地在GROUPING SETS从属子句的圆括号内列出想要定义的各分组集,分组集之间用逗号分隔…
1.透视转换 透视数据(pivoting)是一种把数据从行的状态旋转为列的状态的处理,在这个过程中可能须要对值进行聚合. 每个透视转换将涉及三个逻辑处理阶段,每个阶段都有相关的元素:分组阶段处理相关的分组或行元素,扩展(spreading)阶段处理相关的扩展或列元素,聚合阶段处理相关的聚合元素和聚合函数.例子中的分组元素是empid,扩展元素为custid,聚合函数为SUM(),聚合元素为qty. (1)使用标准SQL进行透视转换 SELECT empid, SUM(CASE WHEN cust…
--不同SQL Server数据库之间的跨数据库查询 EXEC sp_addlinkedserver @server=N'OldDatabase', --自己定义别名 @srvproduct=N'', @provider=N'SQLNCLI', @datasrc=N'10.199.123.123\SQL2008R2' ' [Id] ,[CreatedBy] ,[CreatedDate] ,[LastUpdatedBy] ,[LastUpdatedDate] FROM [OldDatabase].…
为什么sql里面not in后面的子查询如果有记录为NULL的,主查询就查不到记录???原因很简单: SELECT * FROM dbo.TableA AS a WHERE a.id NOT IN ( 2, NULL ) –等同于: SELECT * FROM Table_A AS a WHERE a.id <> 2 AND a.ID <> NULL 由于NULL值不能参与比较运算符,导致条件不成立,查询不出来数据. 转载:https://blog.csdn.net/coder_o…
SQL Server中Table字典数据的查询SQL示例代码 前言 在数据库系统原理与设计(第3版)教科书中这样写道: 数据库包含4类数据: 1.用户数据 2.元数据 3.索引 4.应用元数据 其中,元数据也叫数据字典,定义如下: 下面这篇文章就来给大家分享一个关于查询SQL Server Table 结构的SQL 语句. T-SQL 如下: SELECT (case when a.colorder=1 then d.name else '' end) 表名, a.colorder 字段序号,a…
原文:在论坛中出现的比较难的sql问题:32(row_number函数+子查询 sql循环取差值) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路. sql循环取差值,该怎么写? http://bbs.csdn.net/topics/390636438?page=1#post-396012416 现在有一组 条件 和 一个 数字(比如是10) 根据条件可以查出若干条数据 ,比如是这么样子的 ID Num NumOut 1   4    0 2   5    0 3  …
原文:在论坛中出现的比较难的sql问题:31(row_number函数+子查询 月环比计算) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.…
原文:在论坛中出现的比较难的sql问题:4(row_number函数+子查询 分组连续编号问题) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路. 求一查询语句 http://bbs.csdn.net/topics/390633004 CREATE #temp (cName CHAR(1),re int) INSERT #temp SELECT 'A',1 UNION ALL SELECT 'A',2 UNION ALL SELECT 'B',3 UNION ALL…
原文:在论坛中出现的比较难的sql问题:2(row_number函数+子查询) 2.如何去掉字段内的重复.…
前言 上一篇我们分析了查询优化器的工作方式,其中包括:查询优化器的详细运行步骤.筛选条件分析.索引项优化等信息. 本篇我们分析在我们运行的过程中几个关键指标值的检测. 通过这些指标值来分析语句的运行问题,并且分析其优化方式. 通过本篇我们可以学习到调优中经常利用的几个利器! 废话少说,开始本篇的正题. 技术准备 数据库版本为SQL Server2008R2,利用微软的一个更简洁的案例库(Northwind)进行分析. 利器一.IO统计 通过这个IO统计能为我们分析出当前查询语句所要扫描的数据页的…
前言 上一篇我们分析了查询优化器的工作方式,其中包括:查询优化器的详细运行步骤.筛选条件分析.索引项优化等信息. 本篇我们分析在我们运行的过程中几个关键指标值的检测. 通过这些指标值来分析语句的运行问题,并且分析其优化方式. 通过本篇我们可以学习到调优中经常利用的几个利器! 废话少说,开始本篇的正题. 技术准备 数据库版本为SQL Server2008R2,利用微软的一个更简洁的案例库(Northwind)进行分析. 利器一.IO统计 通过这个IO统计能为我们分析出当前查询语句所要扫描的数据页的…
分类: MS SQL SERVER 支持三种类型的游标:Transact_SQL 游标,API 服务器游标和客户游标. (1) Transact_SQL 游标 Transact_SQL 游标是由DECLARE CURSOR 语法定义.主要用在Transact_SQL 脚本.存储过程和触发器中.Transact_SQL 游标主要用在服务器上,由从客户端发送给服务器的Transact_SQL 语句或是批处理.存储过程.触发器中的Transact_SQL 进行管理.Transact_SQL 游标不支持…
修改表 修改表 语法: Alter table <旧表名> rename [ TO] <新表名>; 例子:Alter table `demo01` rename `demo02`; 添加字段 语法: Alter Table 表名 ADD 字段名  数据类型  [属性]; 例子:Alter Table `Demo02` ADD `passWord`  varchar(50) not null; 修改字段 语法: Alter table 表名 change  原字段名  新字段名  数…
1. 如果对数据不是工业级的访问(允许脏读),在select里添加 with(nolock) ID FROM Measure_heat WITH (nolock) 2. 限制结果集的数据量,如使用TOP 100等来限制返回的行数.实在不行,在数据库内分页. 3. 查询时不要返回不需要的行.列,即不要用SELECT *, 而是用 SELECT 字段名. 4. 注意UNion和UNion all 的区别:UNION ALL好. 5. 避免使用: like  '%关键字%' 6. 避免在字段上使用函数…
连接查询是关系数据中最主要的查询,包括内连接.外连接等.通过连接运算符可以实现多个表查询.内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值.SQL Server中的内连接有:等值连接和不等连接. 1 内连接-相等连接 相等连接又叫等值连接,在连接条件这使用等号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列. 示例: SELECT [dbo].[Category].* , [dbo].[Product].* FROM [dbo].[…
本文出处: http://www.cnblogs.com/wy123/p/5958047.html 最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫,不知道各种写法孰优孰劣,该选用那种写法,以及各种写法优缺点,本文以一个简单的查询存储过程为例,简单说一下各种写法的区别,以及该用那种写法专业DBA以及熟悉数据库的同学请无视. 废话不多,上代码说明,先造一个测试表待用,简单说明一下这个表的情况 类似订单表,订单表有订单ID,客户ID,订单创建时间等,查询条件是…
主键 数据库主键是指表中一个列或列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键,通过它可强制表的实体完整性.当创建或更改表时可通过定义 PRIMARY KEY约束来创建主键.一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值.由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列. 主键的作用 主键的主要作用如下: (1)保证实体的完整性: (2)加快数据库的操作速度: (3) 在表中添加新记录时,数据库会自…
优点: 一.简单性.视图不仅可以简化用户对数据的理解,也可以简化他们的操作.那些被经常使用的查询可以被定义为视图,从而使用户不必为以后的操作每次都指定全部的条件. 二.安全性.通过视图用户只能查询和修改他们所能见到的数据.数据库中的其他数据则既看不见也取不到.数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上.通过视图,用户可以被限制在数据的不同子集上. 三. 逻辑数据独立性.视图可以使应用程序和数据库表在一定程度上独立.如果没有视图,应用一…
优点: 1. 允许模块化程序设计.2.可维护性高,只需创建存储过程一次并将其存储在数据库中,以后即可在程序中调用该过程任意次.存储过程可独立于程序源代码而单独修改,而不需要更改.测试以及重新部署程序集.3.运行速度快.存储过程将比T-SQL批代码的执行要快.存储过程是被编译后存放在数据库服务器的过程高速缓存中,当使用时,服务器不必再重新分析和编译它们. 4. 减少网络流量,在网络中要发送的数百行代码,可由一条执行其存储过程代码的一条单独语句就可实现. 5.代码精简一致,一个存储过程可以用于应用程…
主键 数据库主键是指表中一个列或列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键,通过它可强制表的实体完整性.当创建或更改表时可通过定义 PRIMARY KEY约束来创建主键.一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值.由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列. 主键的作用 主键的主要作用如下: (1)保证实体的完整性: (2)加快数据库的操作速度: (3) 在表中添加新记录时,数据库会自…
分享一个关于查询SQL Server Table 结构的SQL 语句. T-SQL 如下: SELECT (case when a.colorder=1 then d.name else '' end) 表名,a.colorder 字段序号,a.name 字段名,(case when a.colorder=1 then isnull(f.value,'') else '' end) 表说明, (case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')…