SQL Server的EXISTS结构学习_Mssql数据库教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:SQL Server 2005代理服务应用软件组成
代理服务是一种复杂的技术,具有很多可配置的移动组件。详细信息如下: 信息 信息是指在服务代理应用程序中调用的基本信息单元。对于服务代理来说,信息的接收总是按照其被发送的顺序进行,并且保证仅发送和接收一次。同时保证信息不丢失。有时发送的信息不

有件东西我观察了很多年,那就是很少有开发者会去使用SQL Server中的一个非常有用的东西——EXISTS结构。你可以在各种情况中用到EXISTS结构,在这篇文章中我会向大家介绍其中的一些。

EXISTS结构

EXISTS结构是一个TSQL函数,这个函数会就圆括号中的子查询返回一个布尔变量。如果子查询返回了任意行的话,这个结构就返回真;否则,它就返回假。这个结构特别适用于查询表中是否存在某些记录。它也非常适合来决定是否在表中运行更新或者插入语句(在这篇文章中,随后我将向大家介绍)。

Listing A中创建了一个表并插入了一些数据,这样你就可以利用这张表来看看EXISTS结构是如何工作的了。Listing B中的脚本使用EXISTS结构在SalesHistory表中检查每一行,并根据已存在的行得到一个变量。这个脚本将返回1(真),这意味着SalesHistory表包含你所要查询的行。

在这种情况下,一旦在SalesHistory表中找到了一条记录,EXISTS结构就不会继续查找,并马上返回1。使用EXISTS结构额外的好处就是,一旦它找到满足条件的记录,就会立即返回。

Listing C与上面的脚本类似,但是它的返回值是0,因为在这个条件下,EXISTS条件不满足。

由于EXISTS结构的工作原理,所以下面的语句所实现的功能是一样的。


SELECT * FROM SalesHistory

WHERE EXISTS(SELECT NULL)

SELECT * FROM SalesHistory

WHERE 1 = 1

SELECT * FROM SalesHistory

WHERE EXISTS(SELECT 1)

在刚才的脚本中,你可能会对下面的语句感到迷惑:

SELECT * FROM SalesHistory

WHERE EXISTS(SELECT NULL)

因为NULL在数据库中是一个值(它是一个未知的值),在出现NULL值的地方EXISTS结构都将返回真。

开发者很少使用EXISTS对子查询进行操作。下面的查询将返回同样的结果集,虽然它们的结构不同。第一个查询使用了EXISTS的相关子查询,第二查询在SalesHistory表中,将SalePrice字段与该字段的总平均值进行比较。


SELECT * FROM SalesHistory sh

WHERE EXISTS

(
SELECT AVG(SalePrice)

FROM SalesHistory shi

HAVING AVG(SalePrice) > sh.SalePrice
)
SELECT * FROM SalesHistory sh

WHERE SalePrice <

(
SELECT AVG(SalePrice)

FROM SalesHistory shi
)

分享:四个关于SQL Server 2005数据库镜像的问题
一:什么是数据库镜像? Robidoux:数据库镜像是将数据库事务处理从一个SQL Server数据库移动到不同SQL Server环境中的另一个SQL Server数据库中。镜像的拷贝是一个备用的拷贝,不能直接访问;它只用在错误恢复的情况下。 因为是在SQL Server 2005中新引入的特

共2页上一页12下一页
来源:模板无忧//所属分类:Mssql数据库教程/更新时间:2009-03-02
相关Mssql数据库教程