老尸 发表于 2015-1-16 14:19:22

Exists用法

用一个库#bak_database存放这些历史数据。exists与notexists
http://msdn.microsoft.com/zh-cn/library/ms188336.aspx
SQLServer2008联机丛书(2009年5月)
EXISTS(Transact-SQL)
指定一个子查询,测试行是不是存在。
Transact-SQL语法商定
语法
EXISTSsubquery参数
subquery
受限定的SELECT语句。不同意利用COMPUTE子句和INTO关头字。有关具体信息,请参阅SELECT(Transact-SQL)中有关子查询的信息。
了局范例
Boolean
了局值
假如子查询包括任何行,则前往TRUE。
示例
A.在子查询中利用NULL仍旧前往了局集
以下示例前往在子查询中指定了NULL时的了局集,而且经由过程利用EXISTS仍旧求值为TRUE。
复制代码
USEAdventureWorks;
GO
SELECTDepartmentID,Name
FROMHumanResources.Department
WHEREEXISTS(SELECTNULL)
ORDERBYNameASC;B.对照利用EXISTS和IN的查询
以下示例对照了两个语义同等的查询。第一个查询利用EXISTS,第二个查询利用IN。
复制代码
USEAdventureWorks;
GO
SELECTa.FirstName,a.LastName
FROMPerson.ContactASa
WHEREEXISTS
(SELECT*
FROMHumanResources.EmployeeASb
WHEREa.ContactId=b.ContactID
ANDa.LastName=Johnson);
GO上面的查询利用IN。
复制代码
USEAdventureWorks;
GO
SELECTa.FirstName,a.LastName
FROMPerson.ContactASa
WHEREa.LastNameIN
(SELECTa.LastName
FROMHumanResources.EmployeeASb
WHEREa.ContactId=b.ContactID
ANDa.LastName=Johnson);
GO以下是个中任一查询的了局集。
复制代码
FirstNameLastName
------------------------------------------------------------
BarryJohnson
DavidJohnson
WillisJohnson
(3row(s)affected)C.对照利用EXISTS和=ANY的查询
以下示例显现两个查找其称号与供给商称号不异的商铺的查询。第一个查询利用EXISTS,第二个查询利用=ANY。
复制代码
USEAdventureWorks;
GO
SELECTDISTINCTs.Name
FROMSales.StoreASs
WHEREEXISTS
(SELECT*
FROMPurchasing.VendorASv
WHEREs.Name=v.Name);
GO上面的查询利用=ANY。
复制代码
USEAdventureWorks;
GO
SELECTDISTINCTs.Name
FROMSales.StoreASs
WHEREs.Name=ANY
(SELECTv.Name
FROMPurchasing.VendorASv);
GOD.对照利用EXISTS和IN的查询
以下示例显现查找以P开首的部门员工的查询。
复制代码
USEAdventureWorks;
GO
SELECTc.FirstName,c.LastName,e.Title
FROMPerson.ContactASc
JOINHumanResources.EmployeeASe
ONe.ContactID=c.ContactID
WHEREEXISTS
(SELECT*
FROMHumanResources.DepartmentASd
JOINHumanResources.EmployeeDepartmentHistoryASedh
ONd.DepartmentID=edh.DepartmentID
WHEREe.EmployeeID=edh.EmployeeID
ANDd.NameLIKEP%);
GO上面的查询利用IN。
复制代码
USEAdventureWorks;
GO
SELECTc.FirstName,c.LastName,e.Title
FROMPerson.ContactAScJOINHumanResources.EmployeeASe
ONe.ContactID=c.ContactID
JOINHumanResources.EmployeeDepartmentHistoryASedh
ONe.EmployeeID=edh.EmployeeID
WHEREedh.DepartmentIDIN
(SELECTDepartmentID
FROMHumanResources.Department
WHERENameLIKEP%);
GOE.利用NOTEXISTS
NOTEXISTS的感化与EXISTS正相反。假如子查询没有前往行,则满意NOTEXISTS中的WHERE子句。以下示例查找不在部门中且姓名以P开首的员工。
复制代码
SELECTc.FirstName,c.LastName,e.Title
FROMPerson.ContactASc
JOINHumanResources.EmployeeASe
ONe.ContactID=c.ContactID
WHERENOTEXISTS
(SELECT*
FROMHumanResources.DepartmentASd
JOINHumanResources.EmployeeDepartmentHistoryASedh
ONd.DepartmentID=edh.DepartmentID
WHEREe.EmployeeID=edh.EmployeeID
ANDd.NameLIKEP%)
ORDERBYLastName,FirstName
GO上面是了局集:
<p>复制代码
FirstNameLastNameTitle
------------------------------------------------------------------------
SyedAbbasPacificSalesManager
HazemAbolrousQualityAssuranceManager
HumbertoAcevedoApplicationSpecialist
PilarAckermanShipping&ReceivingSuperviso
Fran?oisAjenstat&nbs使为了数据安全,我们搭建了主从。但实时主从备份只能防止硬件问题,比如主库的硬盘损坏。但对于误操作,则无能为力。比如在主库误删一张表,或者一个update语句没有指定where条件,导致全表被更新。

仓酷云 发表于 2015-1-18 12:55:22

可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。

飘灵儿 发表于 2015-1-26 21:03:06

原来公司用过MYSQL自己也只是建个表写个SQL

精灵巫婆 发表于 2015-2-4 21:41:56

我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!

愤怒的大鸟 发表于 2015-2-10 19:44:47

原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!

柔情似水 发表于 2015-3-1 15:13:22

是要和操作系统进行Socket通讯的场景。否则建议慎重!

飘飘悠悠 发表于 2015-3-10 20:16:34

比如日志传送、比如集群。。。

海妖 发表于 2015-3-17 10:39:19

我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力

小魔女 发表于 2015-3-24 08:16:46

作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
页: [1]
查看完整版本: Exists用法