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
分享到:
相关推荐
### Oracle数据库中Exists与In的使用详解 #### 一、Exists 的使用方法 在Oracle数据库中,`EXISTS` 是一种常用的子查询操作符,用于判断子查询是否有结果返回。如果子查询至少返回一行数据,则 `EXISTS` 表达式的...
SQL 中 IN、EXISTS、NOT IN、NOT EXISTS 的区别 IN、EXISTS、NOT IN、NOT EXISTS 是 SQL 中四种常用的条件判断运算符,它们之间的区别主要体现在使用场景、执行效率和语法结构上。 IN IN 是一种条件判断运算符,...
首先,让我们来看看"EXISTS"的用法。"EXISTS"子句通常与一个子查询一起使用,它并不关心子查询返回的具体值,而是关注子查询是否能返回至少一行数据。例如: ```sql SELECT * FROM Table1 WHERE EXISTS (SELECT 1 ...
首先,让我们回顾`NOT EXISTS`的基本用法。当我们在一个查询中使用`NOT EXISTS`时,它会检查子查询中的条件是否不成立。如果子查询返回任何记录,那么`NOT EXISTS`子句就会为假,导致外层查询的相应行被排除。反之,...
Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的SQL功能,包括聚合函数SUM。SUM函数用于对指定列的数据进行求和,常用于统计分析。在Oracle中,SUM函数可以结合CASE WHEN语句,使得条件求和变得...
"SQL中IN,NOT IN,EXISTS,NOT EXISTS的用法和差别"是SQL查询的基础。`IN`用于判断某值是否在给定的集合中,`NOT IN`则相反。`EXISTS`和`NOT EXISTS`则更注重子查询的存在与否,而非具体值的比较。例如,`SELECT * ...
Oracle数据库中的多表关联UPDATE语句是用于在一个表中更新数据时,依据另一个表的条件进行操作的关键技术。这在处理复杂的数据同步或修正场景时非常有用。在本例中,我们将探讨如何利用多表关联来更新数据,并通过...
- **EXISTS**:检查数组中是否存在某个特定元素。 - **EXTEND**:扩展数组的大小。可以指定扩展到特定的索引或增加特定数量的元素。 - **FIRST/LAST**:返回数组的第一个或最后一个元素的位置。 - **NEXT/PRIOR**:...
当Oracle执行包含“Exists”的查询时,它会首先处理外层查询,同时对内层查询进行逐行检查。一旦找到满足条件的第一行数据,内层查询就会停止,从而大大提高了查询效率。 ### “Exists”的适用场景 - 当内层查询的...
DBMS_OUTPUT.PUT_LINE('ACL already exists.'); ELSE RAISE; END IF; END; / ``` #### 发送包含POST参数的请求示例 以下示例展示了如何使用`UTL_HTTP`发送一个包含POST参数的HTTP请求: ```plsql DECLARE l_...
3. 子查询:理解嵌套查询的概念,掌握IN、NOT IN、EXISTS、NOT EXISTS等子查询用法。 4. 分区和索引:了解Oracle的分区技术,如何提高查询性能,以及索引的创建、管理和使用。 5. 视图:创建和使用视图以简化复杂...
对于使用DBLINK远程访问数据库的SQL,ORACLE可以有两种选择: 第一:在Remote数据库执行该段SQL; 第二:在Local数据库执行该段SQL; 所以优化策略和思路: 策略:远程访问,网络传输占很大部分,优化原则,减少网络...
本文详细介绍了Oracle数据库中常用的通配符和运算符,包括它们的定义、用法以及具体的应用示例。通过学习这些内容,您可以更加熟练地进行数据检索和处理,从而提高工作效率。希望本文能够帮助您更好地理解和掌握...
- **TABLE_EXISTS_ACTION**:定义当表已存在时的行为。 - **REPLACE**:替换现有表。 - **APPEND**:向现有表追加数据。 - **SKIP_CORRUPT**:跳过损坏的行。 #### 六、IMPDP用法 - **导入表**:使用SCHEMAS和...
通过本文,我们将详细介绍Oracle中常见的通配符及其用法,帮助读者更好地理解和运用这些符号,从而提高SQL查询的灵活性和效率。 #### 一、通配符概述 在Oracle SQL中,通配符主要用于`LIKE`操作符中,用于模糊查询...
* TABLE_EXISTS_ACTION:指定如果表已经存在时的操作。 六、IMPDP 用法 IMPDP 的用法非常灵活,可以根据实际情况进行选择。以下是一些常见的用法: * 导入表:IMPDP 可以导入单个表或多个表的数据。 * 导入方案:...
本文将深入探讨Oracle中`UPDATE`语句的几种常见用法,以及在不同场景下如何进行性能分析和优化。 #### 简单的`UPDATE`语句 在最基本的层面上,`UPDATE`语句用于修改表中的特定行。例如,在上述例子中,由于客户所在...
### Oracle数据库备份与还原知识点详解 #### 一、Oracle数据库备份概述 Oracle数据库备份是确保数据安全的关键步骤之一。...同时,了解并掌握这些工具的具体用法和注意事项,对于提高数据库运维效率具有重要意义。
本文将深入探讨这个语法以及与之相关的函数,并通过实例来说明它们的用法。 首先,我们创建了一个名为`FLFL`的表,用于存储具有层级关系的数据。表的结构如下: ```sql CREATE TABLE FLFL ( ID NUMBER NOT NULL, ...