转:http://www.cnblogs.com/WizardWu/archive/2011/10/01/2197147.html

EXISTS运算符

  EXISTS 可称之为运算符,有些书称它为关键词。 EXISTS 和 IN 关键词很类似,但仍有些不同,EXISTS 使用时不会返回数据,而是返回简单的 TRUE / FALSE。如下示例,即使子查询返回 NULL,用 EXISTS 也会得到 TRUE:

SELECT DepartmentID, Name
FROM HumanResources.Department
WHERE EXISTS (SELECT NULL)

EXISTS和JOIN比较

  两个示例虽然结果相同,但 EXISTS 的性能会较好 (书上说的)。当我们使用 EXISTS 关键词时,SQL Server 不会用 full row-by-row join,而是在记录当中搜寻,当它找到第一个符合条件的记录时,就会立即停止后续搜寻的动作,并标示为 TRUE,表示不需要再往下找了;反观 inner join 则不会有此种标示的动作。

  此外,NOT EXISTS 也有此种标示的功能。当 NOT EXISTS 找到符合条件的数据时,同样也会标示,但标示为 FALSE,表示不需要再往下找了。

  Join写法:

SELECT  e.BusinessEntityID,  FirstName,  LastName
FROM HumanResources.Employee e
JOIN Person.Person pp ON e.BusinessEntityID = pp.BusinessEntityID
JOIN HumanResources.JobCandidate jc ON e.BusinessEntityID = jc.BusinessEntityID

  Existis写法:

SELECT  e.BusinessEntityID,  FirstName,  LastName
FROM HumanResources.Employee e
JOIN Person.Person pp ON e.BusinessEntityID = pp.BusinessEntityID
WHERE EXISTS
(
SELECT BusinessEntityID
FROM HumanResources.JobCandidate jc
WHERE e.BusinessEntityID = jc.BusinessEntityID
)

检查对象是否存在

  第一次执行此语句时,若没有 DBCreateTest 数据库,则创建它;第二次执行时,由于该数据库已存在,因此会印出自定义的提示信息。

IF NOT EXISTS (SELECT 'True' FROM sys.databases WHERE name = 'DBCreateTest')
BEGIN
CREATE DATABASE DBCreateTest
END
ELSE
BEGIN
PRINT '此数据库已经存在。跳过了 CREATE DATABASE 语句'
END
GO

EXISTS、EXCEPT、INTERSECT 运算符的更多相关文章

  1. [讲解]sql except和intersect运算符(比拟两个或多个select语句的结果并前去非重复值)

    图 1 UNION 中若有重复的行,会被移除,只留下一个 1.简介 EXCEPT和INTERSECT运算符使您可以比较两个或多个SELECT语句的结果并返回非重复值. 2.区别 EXCEPT运算符返回 ...

  2. 使用INTERSECT运算符

    显示符合以下条件的雇员的雇员ID 和职务ID:这些雇员的当前职务与以前的职务相同,也就是说这些雇员曾担任过别的职务,但现在又重新担任了以前的同一职务. hr@TEST0924> SELECT e ...

  3. SQL中intersect、union、minus和except 运算符

    1.intersect运算符intersect运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表.当 ALL 随 INTERSECT 一起使用时 (inte ...

  4. [SQL 高级查询运算符的用法 UNION (ALL),EXCEPT(ALL),INTERSECT(ALL) ]

    今天看到 三个查询运算符,给大家分享分享 为此我建立了两张表分别为 Articles 和  newArticles 我建立的时候,只建立了一张表 Articles   ,表 newArticles 是 ...

  5. SQL Server里的INTERSECT

    在今天的文章里,我想讨论下SQL Server里的INTERSECT设置操作.INTERSECT设置操作彼此交叉2个记录集,返回2个集里列值一样的记录.下图演示了这个概念. INTERSECT与INN ...

  6. Shell教程5-Shell运算符

    Bash 支持很多运算符,包括算数运算符.关系运算符.布尔运算符.字符串运算符和文件测试运算符. 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最 ...

  7. 【Shell脚本学习10】Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等

    Bash 支持很多运算符,包括算数运算符.关系运算符.布尔运算符.字符串运算符和文件测试运算符. 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最 ...

  8. 在 SELECT 查询中使用集运算符

    在 SELECT 查询中使用集运算符,可以将来自两个或多个查询的结果合并到单个结果集中. 在进行集运算之前,请确保: (1)所有输入集合中,列数和列的顺序必须相同. (2)对应的列中,数据类型必须兼容 ...

  9. SQLServer中exists和except用法

    一.exists 1.1 说明 EXISTS(包括 NOT EXISTS)子句的返回值是一个BOOL值.EXISTS内部有一个子查询语句(SELECT ... FROM...),我将其称为EXIST的 ...

随机推荐

  1. Oracle学习系列1

    两个服务必须启动: OracleOraDb10g*TNListener 和 OracleService*** 使用sqlplusw先进行环境的设置 set linesize 300 ; set pag ...

  2. Linux系统编程@多线程与多进程GDB调试

    博客内容参考自 http://www.cnblogs.com/xuxm2007/archive/2011/04/01/2002162.html http://blog.csdn.net/pbymw8i ...

  3. JVM ,JIT ,GC RUNTIME 解析

    Java Class字节码知识点回顾 https://yq.aliyun.com/articles/2358?spm=5176.8067842.tagmain.105.fQdvH3 JVM Class ...

  4. PostgreSQL and bloat

    The bucardo project has released its nagios plugins for PostgreSQL and we can extract from them this ...

  5. ABBYY FineReader无法打开TWAIN源怎么办

    ABBYY FineReader OCR文字识别软件不仅可以将PDF文档和图像文件(包括数码照片)转换为可编辑.可搜索的格式,还可以用来扫描文档,但在扫描过程中,有时可能会出现以下两种错误信息:一是无 ...

  6. NOLOCK、HOLDLOCK、UPDLOCK、TABLOCK、TABLOCKX

    NOLOCK(不加锁) 此选项被选中时,SQL Server 在读取或修改数据时不加任何锁. 在这种情况下,用户有可能读取到未完成事务(Uncommited Transaction)或回滚(Roll ...

  7. php-mysql-excel

    <?php $fname = $_FILES['MyFile']['name']; $do = copy($_FILES['MyFile']['tmp_name'],$fname); if ($ ...

  8. Bootstrap 3兼容IE8浏览器(转)

    Bootstrap是一个响应式的布局,你可以在宽屏电脑.普通电脑,平板电脑,手机上都得到非常优秀的布局体验.这种响应式的布局正是通过CSS3的媒体查询(Media Query)功能实现的,根据不同的分 ...

  9. Amazon关键词抓取

    亚马逊的网址构造很简单,几乎算是静态的网页,花费3小时完美收工,不要在意细节! 在python3下利用xpath就可以完美解决 xpath的使用方法请见: python之lxml(xpath) 入口图 ...

  10. 通过批处理文件启动oracle11g服务

    注:ORCL是数据库实例名,默认的数据库是ORCL,你可以创建其他的,即OracleService+数据库名. ========================================启动服务 ...