|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
用一个库#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条件,导致全表被更新。 |
|