随笔分类 - 数据库技术
包括MS SQL Server,Oracle等
全局临时表
摘要:全局临时表是以两个‘##’符号为前缀,并且它对所有会话可见的一种临时表。全局临时表一般用在需要向所有人共享数据的时候使用。下面是一个全局临时表的示例。-- 全局临时表IF OBJECT_ID('tempdb.dbo.##Globals','U') IS NOT NULL DROP TABLE d...
阅读全文
局部临时表
摘要:局部临时表有两个特点,一是表名以'#'号作为前缀,二是它只对创建它的会话在创建级和调用堆栈内部级(包括内部的过程,函数,触发器和动态批处理)可见。局部临时表的应用场景是,当需要把中间结果临时保存起来,以便供以后查询这些临时数据的时候使用。下面是创建局部临时表的示例代码。USE TSQLFunda...
阅读全文
动态SQL基础
摘要:动态SQL就是我们可以动态构造SQL代码,然后再执行这个批处理。有两种执行动态SQL的方法,分别是EXEC命令和sp_executesql存储过程。下面是示例代码。USE TSQLFundamentals2008;GO-- 动态SQL-- 方法一:EXEC命令(支持普通字符和Unicode字符)...
阅读全文
删除数据
摘要:我们有两种方式删除数据,DELETE语句和TRUNCATE语句。需要注意它们的区别,DELETE语句是以完整模式记录日志的,所以它的性能相对较低。而TRUNCATE语句是以最小模式来记录日志的,并且它会重置标识种子。下面是示例代码。USE tempdb;GO-- 准备测试数据IF OBJECT_...
阅读全文
修改数据
摘要:我们一般使用UPDATE语句对表中数据行的一个子集进行修改,除了使用标准的UPDATE语句外,我们还可以使用基于联接的UPDATE语句。为了测试,我们先创建了两张表,Orders和OrderDetails,测试代码如下。USE tempdb;GO-- 准备测试数据IF OBJECT_ID('db...
阅读全文
插入数据
摘要:我们可以通过以下几种方式向表中插入数据。分别是INSERT VALUES,INSERT SELECT,INSERT EXEC,SELECT INTO和BULK INSERT共五种方法。为了演示,我们先在数据库tempdb中创建表dbo.Orders,然后分别用这几种方法向表中插入数据,下面是示例...
阅读全文
存储过程基础
摘要:这一篇要总结的是存储过程,包括存储过程有哪几种,如何创建,以及最后如何调用存储过程。所以分为以下几个方面进行总结。1,不带参数的存储过程2,带输入参数的存储过程3,带输入和输出参数的存储过程4,带返回值的存储过程不带参数的存储过程例如,以下存储过程返回Employees表中所有职员的记录。存储过...
阅读全文
相关子查询
摘要:相关子查询是指引用了外部查询中出现的表的列的子查询。这就意味着子查询要依赖于外部查询,不能独立地调用它。在逻辑上,相关子查询会为每个外部行单独计算一次。这篇文章我想从以下两个方面进行总结。 1,一个相关子查询的简单例子 2,相关子查询和EXISTS谓词 一个相关子查询的简单例子 例如,以下查询会为每个客户返回其订单ID最大的订单。 SQL查询代码如下: -- 相关子查询SELEC...
阅读全文
独立子查询
摘要:从这一篇开始要总结子查询了,什么是子查询呢?子查询就是将内部查询的结果供外部查询使用,内部查询可以取代基于常量或变量的表达式,并在运行时进行计算。通过使用子查询,可以避免在查询解决方案中把操作分成多个步骤,并在变量中保存中间查询结果的需要。 子查询可以分为独立子查询和相关子查询,那么这一篇我们总结的就是独立子查询,我想分为以下几个方面进行总结。 1,独立标量子查询 2,独立多值子查询 独立...
阅读全文
特殊联接查询
摘要:除了传统的三种联接查询外,还有一些特殊的联接查询。这篇文章就将对其进行总结,主要有以下几种特殊的联接查询。 1,组合联接查询 2,不等联接查询 3,多表联接查询 组合联接查询 组合联接就是联接条件涉及联接两边的多个列的查询。当需要根据主键-外键关系来联接两个表,而且主外键关系是组合的(即关系基于多个列)时,通常就要使用组合联接。 例如,假设dbo.Table2表上定义了两个外键(col...
阅读全文
外联接查询
摘要:这一篇文章要总结的是用得最多的联接查询即外联接查询,外联接查询相对于交叉联接和内联接来说要更复杂一些,我准备从以下几个方面对外联接进行总结。1,什么是外联接查询2,一个外联接查询的例子3,关于外联接查询的总结什么是外联接查询外联接除了有内联接的两个逻辑处理步骤(即笛卡尔积和ON过滤)之外,还多加...
阅读全文
内联接查询
摘要:内联接要应用两个逻辑查询处理步骤:它首先像交叉联接一样,对两个输入表进行笛卡尔积运算;然后根据用户指定的谓词对结果行进行过滤。 使用内联接须在两个表之间指定INNER JOIN关键字,当然,INNER关键字是可选的,因为内联接是默认的联接方式,所以可单独指定JOIN关键字。然后利用ON关键字对...
阅读全文
交叉联接查询
摘要:从这一篇开始我们要总结多表之间的联接查询了,那么首先从交叉联接查询开始。我们可以从以下几点来学习交叉联接。1,什么是交叉联接2,一个交叉联接查询的例子什么是交叉联接那么什么是交叉联接呢?在逻辑上,交叉联接是一种最简单的联接。交叉联接只实现一个逻辑查询步骤(笛卡尔积)。这一步是对输入的两个表进行操...
阅读全文
UNION并集运算
摘要:在集合论中,两个集合(集合A和集合B)的并集是一个包含集合A和B中所有元素的集合。换句话说,如果一个元素属于任何一个输入集合,那么它也属于结果集。如图所示。 对于集合运算,需要注意以下几点:参与集合运算的两个查询生成的结果集必须包含相同的列数,并且相应列必须具有兼容的数据类型。集合运算结果中的...
阅读全文
字符串处理函数
摘要:这一篇文章主要总结开发过程中经常使用到的字符串处理函数,它们在处理字符串时非常有用,那么,总结起来有以下函数。1,字符串串联运算符2,SUBSTRING提取子串3,LEFT和RIGHT4,LEN和DATALENGTH5,CHARINDEX函数6,PATINDEX函数7,REPLACE替换8,RE...
阅读全文
CASE表达式的使用
摘要:我们在开发过程中,经常需要针对一列,基于条件逻辑来返回一个值,那么,这时候就需要使用到CASE表达式了。 例如,以下对Products表的查询就在SELECT语句中使用了CASE表达式,以生成用于描述categoryid列取值的信息。 SQL代码如下: -- 设置数据库上下文USE TSQLFundamentals2008;GOSELECT productid,productname,...
阅读全文
常用的谓词和逻辑运算符
摘要:在我们写SQL查询的过程中,有几个使用得非常频繁的谓词和逻辑运算符,谓词主要有IN,BETWEEN,以及LIKE。逻辑运算符主要有OR和AND。下面来分别总结它们。 IN IN一般用于判断一个值是否与一组元素中的至少一个相等。例如,以下SQL查询返回订单ID等于10248,或10249,或10250的订单。 -- 设置数据库上下文USE TSQLFundamentals2008;GOS...
阅读全文
利用OVER开窗函数分页
摘要:在SQL Server中,利用SQL进行分页的方法也有很多,今天要总结的是SQL Server 2005中引入的OVER开窗口函数,然后利用开窗函数进行分页。 示例代码如下: -- 设置数据库上下文USE TSQLFundamentals2008;GO-- 使用ROW_NUMBER分页,查找第1-10条数据SELECT T.custid,T.companyname,T.address,T...
阅读全文