首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)

(2)需求说明   要求执行你透视转换,为每个员工和客户组合返回一行记录,其中包含这一组合的订货量。期望的输出结果如下图所示: ?   ...如果在运行时,标量子查询返回了多个值,查询会失败。...下面的IF-ELSE代码演示了:如果今天是一个月的第一天,对数据库进行完整备份;如果今天是一个月的最后一天,对数据库进行差异备份(所谓差异备份,就是指只保存上一次完整备份以来做过的更新)。...中支持一种叫做游标的对象,可以用它来处理查询返回的结果集中的各行,以指定的顺序一次只处理一行。...一般来说,如果按固定顺序一次处理一行的游标方式涉及到的数据访问要比基于集合的方式少得多,使用游标会更加有效,前一篇提到的连续聚合就是这样的一个例子。   如何使用游标呢? ?

8.9K20
您找到你想要的搜索结果了吗?
是的
没有找到

sql server T-SQL 基础

如果未找到匹配值,也没有else子句,返回null。...PRIOR:返回紧临当前行前面的结果。 FIRST:返回游标中的第一行并将其作为当前行。 LAST:返回游标中的最后一行并将其作为当前行。...如果 n 或 @nvar 为负数,返回游标尾之前的第 n 并将返回变成新的当前行。如果 n 或 @nvar 为 0,则没有返回。...如果 n 或 @nvar 为负数,返回当前行之前的第 n 并将返回变成新的当前行。如果 n 或 @nvar 为 0,返回当前行。 GLOBAL:指定 cursor_name 指的是全局游标。...取值 含义 0 FETCH语句成功 -1 FETCH语句失败或此行不在结果集中 -2 被提取的不存在 @@ROWCOUNT 全局变量 用来提供游标活动信息,它返回受上一语句影响的行数。

2.1K60

《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)

ORDER BY orderdate DESC;   上面这条SQL请求返回与TOP n中最后一行的排序值相同的其他所有。   ...如果没有任何WHEN表达式结果为TRUE,CASE表达式返回ELSE子句中出现的值。...(3)EXISTS谓词:它的输入是一个查询,如果子查询能够返回任何返回True,否则返回False   例如下面的查询会返回下过订单的西班牙客户: select custid, companyname...如果不需要支持输入,使用视图;反之,使用内联表值函数。 四、集合运算 4.1 UNION 并集运算 ?   在T-SQL中。UNION集合运算可以将两个输入查询的结果组合成一个结果集。...INTERSECT集合运算在逻辑上会首先删除两个输入集中的重复,然后返回只在两个集合中中都出现的。换句话说:如果一个行在两个输入集中都至少出现一次,那么交集返回的结果中将包含这一行

1.9K51

SQLServer中的CTE通用表表达式

这一常规使开发人员能获取一个集,并立即将该行集加入到 SELECT 语句中的其他表、视图和用户定义函数中。另一种方案是使用视图而不是派生表。这两种方案都有其各自的优势和劣势。...视图、派生表和 CTE 如果查询需要在一组数据中进行选取,而这些数据在数据库中并不是以表的形式存在, CTE 可能非常有用。...然而,如果 CTE 不是批处理中的第一个语句,必须在 WITH 关键字前添加一个分号。...这意味着如果要使用 CTE,必须紧随 T-SQL 批处理中的 CTE 之后编写引用 CTE 的查询。...当需要多次引用同一行集时,这非常有用;引用 CTE 两次比复制该查询要简单得多。   CTE 并不一定由 SELECT 语句使用;任何引用 CTE 所生成行集的语句都可使用它。

3.8K10

30分钟全面解析-SQL事务+隔离级别+阻塞+死锁

该函数返回0;如果在某个打开的事务返回范围内,返回一个大于0的值。...3.排他锁和共享锁的兼容性 (1)如果数据正在由一个事务进行修改,其他事务既不能修改该数据,也不能读取(至少默认不能)该数据,直到第一个事务完成。...(2)如果数据正在由一个事务读取,其他事务不能修改该数据(至少默认不能)。...fileid与sys.databases_files 目录视图中的file_id列相匹配   例子:     在查询视图sys.dm_tran_locks的时候有一行的resource_description...例如单个语句获得至少5000个锁,就会触发锁升级,如果由于锁冲突而导致无法升级锁,SQL Server每当获取1250个新锁时出发锁升级。

1.9K50

SQL Server 2008新特性——FILESTREAM

以往在对业务系统的文件进行管理时有两种方法,一种是将文件保存到服务器文件系统中,数据库中只保存了该文件的路径,在使用该文件时应用程序连接到服务器读取文件;另一种是将文件以varbinary(max)或image...使用FILESTREAM存储时,需要注意以下内容: 如果表包含FILESTREAM列,一行都必须具有唯一的ID。 不能嵌套FILESTREAM数据容器。...系统将自动创建C:\FileStream文件夹并在其中写入filestream.hdr文件,该文件是 FILESTREAM容器的头文件不能删除,一定要确保在运行该语句之前C:\FileStream并不存在...对于T-SQL访问FILESTREAM数据列来说,FILESTREAM是完全透明的,也就是说,T-SQL仍然使用一般的访问varbinary(max)数据列的方式访问,并不会因为是FILESTREAM列而有所不同...可在同一事务中执行T-SQL语句以保持SQL数据和FILESTREAM数据之间的一致性。

1.3K30

LeetCode刷题100道,让你滚瓜烂熟拿下SQL「建议收藏」

如果与“m” 的match_parameter一起使用,匹配表达式中任何位置的的开头。 $ 匹配字符串的结尾。...如果这一产品在商店里没有出售,则不输出这一行。 输出结果表中的 顺序不作要求 。 查询输出格式请参考下面示例。...表的每一行包含员工的工资信息。 需求 编写一个 SQL 查询,获取并返回 Employee 表中第二高的薪水 。 如果不存在第二高的薪水,查询应该返回 null 。 查询结果如下例所示。...如果 personId 的地址不在 Address 表中,报告为空 null 。 以 任意顺序 返回结果表。 查询结果格式如下所示。...该表的每一行包含了所有账户的交易改变情况. 如果用户收到了钱, 那么金额是正的; 如果用户转了钱, 那么金额是负的. 所有账户的起始余额为 0.

2.4K20

T-SQL基础】01.单表查询-几道sql查询题

如果 datepart 为 month 且 date 月份比返回月份的天数多,因而 date 中的日在返回月份中不存在返回返回月份的最后一天。...如果只为某个日期数据类型的变量指定时间值,所缺日期部分的值将设置为默认值:1900-01-01。如果只为某个时间或日期数据类型的变量指定日期值,所缺时间部分的值将设置为默认值:00:00:00。...如果 startdate 和 enddate 中有一个只含时间部分,另一个只含日期部分,所缺时间和日期部分将设置为各自的默认值。...如果 startdate 和 enddate 属于不同的日期数据类型,并且其中一个的时间部分或秒小数部分精度比另一个高,另一个的所缺部分将设置为 0。...对输出中的按区域排序,NULL值排在最后(在所有非NULL值之后)。 注意,T-SQL中NULL值的默认行为是把NULL值排在前面(所有非NULL值之前)。

1.9K90

为什么SQL语句Where 1=1 and在SQL Server中不影响性能

而在SQL Server领域,T-SQL语句到查询结果返回需要经历一个完整的周期,如图1:     图1.T-SQL生命周期     因此,在关系数据库领域,SQL语句的写法只是一个抽象的逻辑,而不是像编程语言那样直接的实现...比如说访问一行数据,如果是编程语言实现,就需要指定连接数据的方式,打开数据,按某个方式取出数据,最后还要关闭连接,而在SQL Server中,T-SQL仅仅是定义如何去获取所需的数据,而无需考虑实现细节...图1中从T-SQL到具体返回数据经历了多个步骤,每一个步骤又存在大量的规则。...这里我们举例,假如表中有100万数据,where a=1的数据有1万条,where b=1的数据有1万条,A和B的选择性都是1/100=0.01,在Where中A And B联合的估计行数变为0.01...*0.01=0.0001*100万=100,假设where a=1 和b=1所筛选的数据为同样的1万数据,估计行数为100而实际行数为1万,则可能引起执行计划的不准确,从而引起性能问题。

2K30

mysql executereader_C# 操作MySQL数据库, ExecuteReader()方法参数化执行T-SQL语句, 游标读取数据…

C# 操作MySQL数据库, ExecuteReader()方法参数化执行T-SQL语句, 游标读取数据 –ExecuteNonQuery() 对连接执行 Transact-SQL 语句并返回受影响的行数...,如果SQL语句是对数据库的记录进行操作(如记录的增加、删除和更新),那么方法将返回操作所影响的记录条数。...–ExecuteScalar() 执行查询,并返回查询所返回的结果集中第一行的第一列。 忽略其他列或。该方法所返回的结果为object类型,在使用之前必须强制转换为所需的类型。...DataReader对象提供了游标形式的读取方式,当从结果中读取了一行游标会继续读取到下一行。...通过read方法可以判断数据是否还有下一行如果存在数据,继续运行返回true,如果没有数据,返回false。

1.6K20

【SQL进阶】03.执行计划之旅1 - 初探

如果表上有聚集索引,扫描称作聚集索引扫描,查找称作聚集索引查找; 2. 聚集索引扫描和表扫描的性能没多大差异; 3.聚集索引根据数据的键值在表或视图中排序和存储这些数据。...5.每个表只能有一个聚集索引,因为数据本身只能按一个顺序排序。 6.只有当表包含聚集索引时,表中的数据才按排序顺序存储。 如果表具有聚集索引,该表称为聚集表。...如果表没有聚集索引,其数据存储在一个称为堆的无序结构中。 7.加了聚集索引不一定能提高性能,有些情况下,性能可能不如表扫描; 8.聚集索引就是表本身。...ddd',如果结果为true,返回此行。...--用聚集索引查找到了id=2的,由于表中的就是按照id列来排序的,所以找到了这一行, --也就能找到这一行的所有列,所以能够拿到customer列。所以是聚集索引扫描。

1.3K70

T-SQL基础(二)之关联查询

在上篇博文中介绍了T-SQL查询的基础知识,本篇主要介绍稍微复杂的查询形式。 表运算符 表运算符的作用是把为其提供的表作为输入,经过逻辑查询处理,返回一个表结果。...内部 & 外部 内部指的是基于谓词ON与另一侧匹配的,外部则是未匹配的,外部用NULL进行填充。...内联接结果集仅保留内部,外联接结果集返回内部和外部。...笛卡尔乘积 将一个输入表的每一行另一个表的所有匹配,即,如果一张表有ma列,另一张表nb列,笛卡尔乘积后得到的表有mn,a+b列*。...类似的例子有,如果A表示某学校学生的集合,B表示该学校所有课程的集合,A与B的笛卡尔积表示所有可能的选课情况。

2K40

T-SQL基础(一)之简单查询

谓语只关心匹配是否存在,而不管SELECT中指定的属性,就像整个SELECT子句是多余的一样。...的特殊性 若列名为tag的例中存在a,NULL,c,d几行数据,那么COUNT(*)返回4而COUNT(tag)返回3 NULL参与的逻辑运算结果很可能是Unknown(三值逻辑也是引发应用错误的重要原因...TOP不是标准SQL,是T-SQL专有功能,用于限制查询返回的指定行数或百分比: -- 返回Table中的10条数据 SELECT TOP(10) * FROM Table; -- 返回Table中10%...,默认为ELSE NULL。...表表达式 派生表、公用表表达式、视图等 聚合函数 聚合函数对多行数据进行运算后返回标量(聚合),只有SELECT、HAVING、ORDER BY语句中可以使用聚合函数; 开窗函数 开窗函数是对基本查询中的每一行按组

4.1K20

T-SQL基础】02.联接查询

概述: 本系列【T-SQL基础】主要是针对T-SQL基础的总结。 本篇主要是对多表查询基础的总结。...(2)将一个输入表的每行与另一个表的所有行进行匹配。 (3)如果一个表有m,而另一个表有n,将得到m*n的结果集。 2.语法 先创建两张表A,C,如下图所示 ?...怎么理解内联接:   理解内联接最容易的方法是认为A表中每一行同C表中的所有行进行比较,如果A表中的id和C表中的id相等,匹配成功。   ...2.从逻辑上说,这两个客户相关的数据行在联接的第二步(基于ON谓词条件的过滤)就被过滤了,而在第三部又把这些作为外部添加了进来。 3.如果使用内联接,结果将不会返回这两。...添加这两后,就可以在结果中保留左边表的所有。 4.外联接结果可以看作两种,内不行和外部,内部是ON字句的条件能在另一边找到匹配的那些;外部则是找不到那些

3K90

数据库内功心法:数据库基本理论

进一步地说,存储过程是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了。...游标可以定在该单元中的特定,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。...在操作mysql的时候,我们知道MySQL检索操作返回一组称为结果集的。这组返回的行都是与 SQL语句相匹配的(零或多行)。...使用简单的 SELECT语句,例如,没有办法得到第一行、下一行或前 10,也不存在每次一行地处理所有的简单方法(相对于成批地处理它们)。有时,需要在检索出来的中前进或后退一行或多行。...如果自己需要一个共享锁,那么就在表上面添加一个意向共享锁。而如果自己需要的是某行(或者某些)上面添加一个排他锁的话,先在表上面添加一个意向排他锁。

69130

那些年我们写过的T-SQL(上篇)

此外,该字句中可以使用不在SELECT列表中的字段排序,但如果使用了DISTINCT关键字,必须使用SELECT列表中的列,否则由于单个结果可能代表多个原,造成排序的不清晰。...关键字 解释与示例 TOP T-SQL特有功能,用于限制查询返回的行数或的百分比 获取前5记录:SELECT TOP 5 userid FROM HR.Employee ORDER BY userid...为了之后能更好的理解该知识点,提前拿出来给大家见见面,本文下篇还会具体介绍 开窗函数的定义:对于一个查询中的每一行,按的窗口组进行运算,并计算一个标量结果值,的窗口使用OVER字句定义 SELECT...在以后的第三阶段,将识别出保留表中基于ON谓词未能与另一张表匹配的,称之为外部,此阶段会将这些外部添加到之前的结果集中,在这些外部中,其非保留表字段将使用NULL作为占位符。...NULL有两种含义,一种是数据不存在另一种是联接的占位符),如下所示。

3.1K100
领券