exists是用来判断是否存在的,当exists(查询)中的查询存在结果时则返回真,否则返回假。not exists则相反。
exists做为where 条件时,是先对where 前的主查询询进行查询,然后用主查询的结果一个一个的代入exists的查询进行判断,如果为真则输出当前这一条主查询的结果,否则不输出。
上
面这个列子,先查询出s表的结果,然后将结果代入到s.s#,然后再查询出c表中的结果,再一条一条的代入,感觉有点像for的嵌套循环,第一轮外循环
中,满足内部的not exists条件的c表中的结果集被保留,然后再判断外部的not
exists,这次判断是根据内部C表中被保留的结果集的情况,如果结果集为空,则输出当前这一条S表的结果集;然后再进行第二轮大的循环,即取出s表的
第二条结果代入运算。
以上的sql还可以这样理解,最内部的 select * from sc where sc.s#=s.s# and sc.c#=c.c#是查询出所有已经选择过课程的学生及相应课程, select * from c where not exists则是所有没有被选择的课程,在这个基础上的 select sname from s where not exists 则是选取所有没有未选择课程的学生,即选择了所有课程的学员名称。
有两个简单例子,以说明 “exists”和“in”的效率问题
1) select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ;
T1数据量小而T2数据量非常大时,T1<<T2 时,1) 的查询效率高。
2) select * from T1 where T1.a in (select T2.a from T2) ;
T1数据量非常大而T2数据量小时,T1>>T2 时,2) 的查询效率高。
exists 用法:
请注意 1)句中的有颜色字体的部分 ,理解其含义;
其中 “select 1 from T2 where T1.a=T2.a” 相当于一个关联表查询,相当于
“select 1 from T1,T2 where T1.a=T2.a”
但是,如果你当当执行 1) 句括号里的语句,是会报语法错误的,这也是使用exists需要注意的地方。
“exists(xxx)”就表示括号里的语句能不能查出记录,它要查的记录是否存在。
因此“select 1”这里的 “1”其实是无关紧要的,换成“*”也没问题,它只在乎括号里的数据能不能查找出来,是否存在这样的记录,如果存在,这 1) 句的where 条件成立。
in 的用法:
继续引用上面的例子
“2) select * from T1 where T1.a in (select T2.a from T2) ”
这里的“in”后面括号里的语句搜索出来的字段的内容一定要相对应,一般来说,T1和T2这两个表的a字段表达的意义应该是一样的,否则这样查没什么意义。
打个比方:T1,T2表都有一个字段,表示工单号,但是T1表示工单号的字段名叫“ticketid”,T2则为“id”,但是其表达的意义是一样的,而且数据格式也是一样的。这时,用 2)的写法就可以这样:
“select * from T1 where T1.ticketid in (select T2.id from T2) ”
Select name from employee where name not in (select name from student);
Select name from employee where not exists (select name from student);
第一句SQL语句的执行效率不如第二句。
通
过使用EXISTS,Oracle会首先检查主查询,然后运行子查询直到它找到第一个匹配项,这就节省了时间。Oracle在执行IN子查询时,首先执行
子查询,并将获得的结果列表存放在一个加了索引的临时表中。在执行子查询之前,系统先将主查询挂起,待子查询执行完毕,存放在临时表中以后再执行主查询。
这也就是使用EXISTS比使用IN通常查询速度快的原因。
相关推荐
IN、EXISTS、NOT IN、NOT EXISTS 是 SQL 中四种常用的条件判断运算符,它们之间的区别主要体现在使用场景、执行效率和语法结构上。 IN IN 是一种条件判断运算符,用于判断某个值是否存在于一个列表中。其基本语法...
SQL语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的语句 SQL语句优化是数据库性能优化的重要方面之一。在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接。在这种情况下,使用EXISTS...
这些概念对于理解和编写高效的SQL语句至关重要,尤其是在数据分析和数据库管理中。 `CASE WHEN` 是SQL中的一个条件表达式,允许我们根据不同的条件返回不同的结果值。基本语法结构如下: ```sql CASE WHEN 条件1 ...
在 C# 中执行 SQL 语句时,我们可以使用参数化查询来实现 where in 和 like 的参数化查询。如: ```csharp using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); SqlCommand comm =...
在本文中,我们将总结一些常用的SQL语句,并解释AS用法的细节。 一、DELETE语句 DELETE语句用于删除表中的记录。例如,以下语句删除table1中id列与table2中id列相同的记录: ```sql DELETE table1 FROM (SELECT *...
《经典SQL语句大全.doc》这份文档很可能是书中部分内容的摘录或精华版,包含了一些典型的SQL语句示例和应用场景,便于读者快速查阅和学习。对于想要提升SQL技能的读者,无论是初学者还是有一定经验的开发者,这本书...
### SQL Server 2005 EXISTS 使用方法详解 #### 一、EXISTS 子句概述 在 SQL Server 2005 中,`EXISTS` 是一个非常实用的子句,用于检查子查询是否返回至少一行数据。如果子查询返回至少一行数据,则 `EXISTS` ...
如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。 SQL中IN和EXISTS用法的区别 NOT IN sql in与exists区别
本文将深入探讨 SQL 中 `EXISTS`, `NOT EXISTS`, `IN`, `NOT IN` 的使用场景及效率问题。 #### 一、Exists 和 Not Exists 的效率说明 **Exists** 和 **Not Exists** 子句通常用于检查子查询是否返回任何行,它们...
动态SQL语句.txt 动态语句.txt 区分大小写.txt 去掉重复的列名.txt 取n到m条记录.txt 合并字符串.txt 多列的行转列.sql 多行补充.sql 多表对多表进行统计.txt 大小写转换.txt 子查寻和内联查寻.txt 学生名次.txt ...
7. **参数化的SQL语句**:如果在WHERE子句中使用参数,可能会导致索引无法被充分利用。可以尝试使用WITH INDEX提示来强制查询使用某个索引。 8. **避免对字段进行表达式操作**:如`SELECT id FROM t WHERE num / 2 ...
9、说明:in 的使用方法 select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’) 10、说明:两张关联表,删除主表中已经在副表中没有的信息 delete from table1 where not exists ( select * ...
### ASP中的精妙SQL语句实例解析 #### 1. 实现用一个表某些字段更新另一个表同名字段 **SQL语句**: ```sql UPDATE a SET a.b = b.b, a.c = b.c FROM b WHERE b.tindex = a.index; ``` **解释**: 该SQL语句用于...
从给定的文件标题“50句常用SQL语句”及其描述中,我们可以看出这份资料旨在分享在数据库管理和数据检索中频繁使用的SQL查询语句。SQL(Structured Query Language)是用于管理关系数据库的标准语言,其功能强大,...
C#ADO.NET 中使用变量在 SQL 语句中的实现方法 C#ADO.NET 中如何在要执行的 SQL 语句中使用变量是非常重要的,因为它可以提高代码的安全性和可维护性。下面我们将详细介绍如何在 C#ADO.NET 中使用变量在 SQL 语句中...
通过合理选择操作符、优化查询结构、遵循最佳实践,可以在很大程度上提升Oracle数据库的查询效率,为用户提供更快捷、更稳定的服务体验。在实际操作中,开发者和DBA应持续关注查询性能,不断调整和优化SQL语句,以...
### SQL语句帮助手册笔记 #### 一、SQL基础概念与用法 ##### 1. 数据统计函数 在SQL查询中,经常会用到各种数据统计函数来处理数据集中的数值,例如: - `AVG()`:计算平均值。 - `COUNT()`:计算行数。 - `MAX()`...
本文将详细探讨HANA中的SQL语句及其使用方法,并介绍系统视图的相关知识点。 首先,HANA中的SQL语句用于数据库的创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)操作,即CRUD操作。在HANA数据库...
IN 的使用方法** - 示例命令: `select * from table1 where a [not] in ('值1','值2','值4','值6')` - `IN` 关键字用于在 WHERE 子句中指定多个可能的值列表。 **10. 删除主表中已经在副表中没有的信息** - 示例...
if exists用法,里面包含各种需要用到if exists的情况。