`

Oracle Exists 用法

阅读更多

sql exists和not exists用法

 

exists       (sql       返回结果集,为真)  
not       exists       (sql       不返回结果集,为真)
如下:
表A
ID   NAME  
1       A1
2       A2
3       A3

表B
ID   AID   NAME
1       1       B1
2       2       B2  
3       2       B3

表A和表B是1对多的关系   A.ID   =>   B.AID

SELECT   ID,NAME   FROM   A   WHERE   EXIST   (SELECT   *   FROM   B   WHERE   A.ID=B.AID)
执行结果为
1       A1
2       A2
原因可以按照如下分析
SELECT   ID,NAME   FROM   A   WHERE   EXISTS   (SELECT   *   FROM   B   WHERE   B.AID=1)
---> SELECT   *   FROM   B   WHERE   B.AID=1有值,返回真,所以有数据

SELECT   ID,NAME   FROM   A   WHERE   EXISTS   (SELECT   *   FROM   B   WHERE   B.AID=2)
---> SELECT   *   FROM   B   WHERE   B.AID=2有值,返回真,所以有数据

SELECT   ID,NAME   FROM   A   WHERE   EXISTS   (SELECT   *   FROM   B   WHERE   B.AID=3)
---> SELECT   *   FROM   B   WHERE   B.AID=3无值,返回假,所以没有数据

NOT   EXISTS   就是反过来
SELECT   ID,NAME   FROM   A   WHERE NOT   EXIST   (SELECT   *   FROM   B   WHERE   A.ID=B.AID)
执行结果为
3       A3
===========================================================================
EXISTS   =   IN,意思相同不过语法上有点点区别,好像使用IN效率要差点,应该是不会执行索引的原因
SELECT   ID,NAME   FROM   A    WHERE ID   IN   (SELECT   AID   FROM   B)

NOT   EXISTS   =   NOT   IN   ,意思相同不过语法上有点点区别
SELECT   ID,NAME   FROM   A   WHERE ID NOT   IN   (SELECT   AID   FROM   B)

 

===========================================================================
EXISTS:

系统要求进行SQL优化,对效率比较低的SQL进行优化,使其运行效率更高,其中要求对SQL中的部分in/not in修改为exists/not exists

 

修改方法如下:

in的SQL语句

SELECT id, category_id, htmlfile, title, convert(varchar(20),begintime,112) as pubtime
FROM tab_oa_pub WHERE is_check=1 and
category_id in (select id from tab_oa_pub_cate where no='1')
order by begintime desc

修改为exists的SQL语句
SELECT id, category_id, htmlfile, title, convert(varchar(20),begintime,112) as pubtime
FROM tab_oa_pub WHERE is_check=1 and
exists (select id from tab_oa_pub_cate where tab_oa_pub.category_id=convert(int,no) and no='1')
order by begintime desc

分享到:
评论
1 楼 zskangs1126 2013-04-18  
       

相关推荐

    oracle数据库关于exists使用

    oracle数据库关于exists使用方法与in的比较

    sql in,exists,not in,not exists区别

    里面自己根据网上的资源整理出来的一份sql中in,exists,not in,not exists的使用方法以及注意事项等,有助于初学的朋友们借鉴。

    in和exists的区别

    “exists”和“in”是Oracle中,都是查询某集合的值是否存在在另一个集合,但对不同的数据有不同的用法,主要是在效率问题上存在很大的差别,以下有两个简单例子,以说明 “exists”和“in”的效率问题。

    Oracle中Driving_site Hint的用法

    对于使用DBLINK远程访问数据库的SQL,ORACLE可以有两种选择: 第一:在Remote数据库执行该段SQL; 第二:在Local数据库执行该段SQL; 所以优化策略和思路: 策略:远程访问,网络传输占很大部分,优化原则,减少网络...

    ORACLE_多表关联_UPDATE_语句

    把其它表作为条件和更新值的更新语句;例如: 两表(多表)关联update -- 仅在where字句中的连接 --这次提取的数据都是VIP,且... where exists (select 1 from tmp_cust_city b where b.customer_id=a.customer_id )

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...

    ORACLE9i_优化设计与系统调整

    §12.5 使用EXISTS和IN 148 §12.6 分离事务(Discrete Transactions ) 149 §12.7 测试SQL语句性能 151 §12.7.1 SQL_Trace实用工具 151 §12.7.2 TKPROF实用程序 151 §12.8 使用SQL_Trace和TKPROF 151 §12.8.1 ...

    Oracle_Database_11g完全参考手册.part2/3

    13.1.3 EXISTS及其相关子查询的使用 13.2 外部连接 13.2.1 Oracle9i以前版本中的外部连接的语法 13.2.2 现在的外部连接语法 13.2.3 用外部连接代替NOTIN 13.2.4 用NOTEXISTS代替NOTIN 13.3 自然连接和内部连接 13.4 ...

    Oracle_Database_11g完全参考手册.part3/3

    13.1.3 EXISTS及其相关子查询的使用 13.2 外部连接 13.2.1 Oracle9i以前版本中的外部连接的语法 13.2.2 现在的外部连接语法 13.2.3 用外部连接代替NOTIN 13.2.4 用NOTEXISTS代替NOTIN 13.3 自然连接和内部连接 13.4 ...

    Oracle8i_9i数据库基础

    §10.1.8 Not in和Not Exists 218 §10.1.9 关于 COPY命令 218 §10.1.10 列值为NULL情形的处理 219 §10.1.11 使用 product_user_file来限制用户使用产品 220 §10.2 常用技巧 221 §10.2.1 long 类型的查询 222 §...

    Oracle-SQL基础到存储过程下载(第二阶段)

    014.sql高级查询_去重distinct.mp4 015.sql高级查询_null操作.mp4 016.sql高级查询_in操作.mp4 017.sql高级查询_between-and操作.mp4 018.sql高级查询_like模糊...034.sql函数_exists的用法.mp4 035.sql函数_decode与

    数据库表关联与模糊查询正则.md

    一.数据库表关联,二、聚合函数,三.oracle常用的函数,四.联合查询,五.分页查询, 六.exists 的用法:七.模糊查询

    SQL语句集锦.rar

    工作中常用的SQL + 超复杂SQL ...not exists用法实例.txt ORACLE编程实用手册.doc patindex的用法.txt rename存储过程.txt replace.txt rowcount.txt rowcount精华.txt stuff.txt substring和rtrim.txt unionall.txt

    Oracle事例

    sql> alter index xay_id allocate extent(size 200k datafile \'c:/oracle/index.dbf\'); <8>.alter index xay_id deallocate unused; 、查看索引 SQL>select index_name,index_type,table_name from user...

    程序员的SQL金典.rar

     4.1 SELECT基本用法  4.1.1 简单的数据检索  4.1.2 检索出需要的列  4.1.3 列别名  4.1.4 按条件过滤  4.1.5 数据汇总  4.1.6 排序  4.2 高级数据过滤  4.2.1 通配符过滤  4.2.2 空值检测  4.2.3 反义...

    程序员的SQL金典6-8

     4.1 SELECT基本用法  4.1.1 简单的数据检索  4.1.2 检索出需要的列  4.1.3 列别名  4.1.4 按条件过滤  4.1.5 数据汇总  4.1.6 排序  4.2 高级数据过滤  4.2.1 通配符过滤  4.2.2 空值检测  4.2.3 反义...

    程序员的SQL金典7-8

     4.1 SELECT基本用法  4.1.1 简单的数据检索  4.1.2 检索出需要的列  4.1.3 列别名  4.1.4 按条件过滤  4.1.5 数据汇总  4.1.6 排序  4.2 高级数据过滤  4.2.1 通配符过滤  4.2.2 空值检测  4.2.3 反义...

    程序员的SQL金典3-8

     4.1 SELECT基本用法  4.1.1 简单的数据检索  4.1.2 检索出需要的列  4.1.3 列别名  4.1.4 按条件过滤  4.1.5 数据汇总  4.1.6 排序  4.2 高级数据过滤  4.2.1 通配符过滤  4.2.2 空值检测  4.2.3 反义...

    程序员的SQL金典4-8

     4.1 SELECT基本用法  4.1.1 简单的数据检索  4.1.2 检索出需要的列  4.1.3 列别名  4.1.4 按条件过滤  4.1.5 数据汇总  4.1.6 排序  4.2 高级数据过滤  4.2.1 通配符过滤  4.2.2 空值检测  4.2.3 反义...

    db2-技术经验总结

    1.6. DB2实现类型ORACLE的一些功能 29 1.7. 字符数据类型转换的时候需要注意的问题(原) 30 1.8. 本地谓词的使用注意(原) 31 1.9. windows/Linux或Unix下查看DB2端口号 31 1.10. 尽量让fetch first n row only或者...

Global site tag (gtag.js) - Google Analytics