barriers / 阅读 / 详情

SQL关于IN和EXISTS的区别?

2023-06-06 08:37:26
TAG: exists
共6条回复
左迁

IN 其实与等于相似,比如in(1,2) 就是 = 1 or = 2的一种简单写法,所以一般在元素少的时候使用IN,如果多的话就用exists

exists的用法跟in不一样,一般都需要和子表进行关联,而且关联时,需要用索引,这样就可以加快速度。

你的SQL语句用NOT EXISTS可以写成

select MC001 from BOMMC WHERE NOT EXISTS (SELECT MD001 FROM BOMMD where BOMMC.MC001 = BOMMD.MD001)

南yi

in 是把外表和内表作hash 连接

exists是对外表作loop循环,每次loop循环再对内表进行查询。

那些认为exists比in效率高的人,是不准确的。

如果查询的两个表大小相当,那么用in和exists差别不大。

阿啵呲嘚

in 的对象是值

exists 不返回值,只验证

可可

MD001有空值

试试如下

select MC001 from BOMMC WHERE MC001 NOT EXISTS (SELECT MD001 FROM BOMMD AND MD001 IS NOT NULL)

LocCloud

IN和EXISTS一般用于SELECT语句的WHERE子句中作为记录筛选的条件.

IN的一般语法格式为:列(或表达式)

IN(子查询),带IN的子查询只能返回一列值,如果IN前面的列(或表达式)和子查询返回的集合中的一个或一个以上的值相等,则条件为真;如果IN前面的列(或表达式)和子查询返回的集合中的所有值均不相等,则条件为假.

EXISTS子查询的一般格式为EXISTS(子查询),如果子查询包含任何行(有记录返回),则条件为真;如果子查询不包含任何行(无记录返回),则条件为假.由于EXISTS是判断记录的有无确定条件是否成立,并不关心返回的是什么值,因此EXISTS子查询的目标列通常为*.

我不懂运营

IN

确定给定的值是否与子查询或列表中的值相匹配。

EXISTS

指定一个子查询,检测行的存在。

比较使用 EXISTS 和 IN 的查询

exists()后面的子查询被称做相关子查询 他是不返回列表的值的.只是返回一个ture或false的结果,其运行方式是先运行主查询一次 再去子查询里查询与其对应的结果 如果是ture则输出,反之则不输出.再根据主查询中的每一行去子查询里去查询.

in()后面的子查询 是返回结果集的,换句话说执行次序和exists()不一样.子查询先产生结果集,然后主查询再去结果集里去找符合要求的字段列表去.符合要求的输出,反之则不输出.

相关推荐

关于查询语句中的in和exists的区别

类似问题以前也给其他朋友回答过,“exists的效率比in的高”的说法不完全正确,要视情况而定。“exists”和“in”是Oracle中,都是查询某集合的值是否存在在另一个集合,但对不同的数据有不同的用法,主要是在效率问题上存在很大的差别,以下有两个简单例子,以说明 “exists”和“in”的效率问题。1、 select * from Table1 where exists(select 1 from Table2 where Table1.a=Table2.a) ;Table1数据量小而Table2数据量非常大时,Table1<<Table2 时,exists的查询效率高。2、 select * from Table1 where Table1.a in (select Table2.a from Table2) ;Table1数据量非常大而Table2数据量小时,Table1>>Table2 时,in的查询效率高。通过使用EXISTS,Oracle会首先检查主查询,然后运行子查询直到它找到第一个匹配项,这就节省了时间。Oracle在执行IN子查询时,首先执行子查询,并将获得的结果列表存放在一个加了索引的临时表中。在执行子查询之前,系统先将主查询挂起,待子查询执行完毕,存放在临时表中以后再执行主查询。
2023-06-06 02:02:215

exists怎么读

简明英汉词典exist D.J.[iɡ"zist] K.K.[u026aɡ"zu026ast] vi. 1 存在, 有2 生存, 活下来, 幸存
2023-06-06 02:02:471

sql中exists是什么意思,怎么讲解?

sql结构化查询语言(Structured Query Language)exists出现
2023-06-06 02:03:033

oracle中exists用法

if exists (select * from table whre a=1)--------(如果这个select 语句能查询出资料就执 begin end 中的语句)beginend
2023-06-06 02:03:382

exists是什么意思啊

存在
2023-06-06 02:04:082

in和exists代表什么意思

s in P表示当s与P中的某个值相等时 为真: not in 和not exists的区别如果查询语句使用了not in 那么内外表都进行全表扫描,子查询表小的用in,每次loop循环再对内表进行查询。如果查询的两个表大小相当in和exists区别in 是把外表和内表作hash 连接。 exists 相当于存在量词;而not extsts 的子查询依然能用到表上的索引。NOT EXISTS,也就是集合不为空只作用一个集合,而exists是对外表作loop循环。一直以来认为exists比in效率高的说法是不准确的; not exist P表示p为空时为真,那么用in和exists差别不大。所以无论那个表大,这样就可以加快速度。 in表示一个标量和一元关系的关系,而且关联时,需要用索引,没有用到索引,则子查询表大的用exists,一个是大表。如果两个表中一个较小:表示集合存在,一般都需要和子表进行关联,exists的用法跟in不一样。例如 exist P 表示P不空时为真。例如; s not in P 表示s与P中的每一个值都不相等时为真
2023-06-06 02:04:141

sql查询语句中EXISTS怎么使用

简单点说 if EXISTS(select* from tb where name="abc") 就是这样用上面这句话的意思是 查询表tb 找name="abc"的列 如果有找到 exists返回真 否则 返回假 加上if语句 还可以取反操作 if not exists
2023-06-06 02:04:222

update 后面带exists的作用是什么?不带的话,有什么区别?

1、不带exists时,则将所有的t2.c3更新成t1.id; 注:t1需满足 t1.c1 = t2.c1 and t1.c2 = t2.c22、带exists时,则判断t1.id是否为空,如果为空则在1的基础上将t2.c3更新为空; 注:exists(select t1.id from t1 where t1.c1 = t2.c1 and t1.c2 = t2.c2);此句exists是判断t1.id 是否为空
2023-06-06 02:04:354

SQL中EXISTS怎么用

EXISTS是判断是否存在,和in类似,但效率要比in高SELECT*FROMEMP(基础表)WHEREEMPNO>0ANDEXISTS(SELECT‘X"FROMDEPTWHEREDEPT.DEPTNO=EMP.DEPTNOANDLOC=‘MELB")SELECT*FROMEMP(基础表)WHEREEMPNO>0ANDDEPTNOIN(SELECTDEPTNOFROMDEPTWHERELOC=‘MELB")这两句效果一样
2023-06-06 02:04:501

EXISTS NOT EXISTS问题?

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N"[dbo].[表名]") AND type in (N"U"))DROP TABLE [dbo].[表名]如果存在就drop掉tablenot exists 类似如果不存在就。。。
2023-06-06 02:04:586

oracle中EXISTS是什么意思

exists 是Oracle sql中的一个函数。表示是否存在符合某种条件的记录。如select * from A,Bwhere A.id=B.idand exists (SELECT * FROM A WHERE A.type LIKE "S%")它和Oracle的另外一个函数IN很相似,你可以比较一下他们的用法,见下:http://www.blogjava.net/terry-zj/archive/2006/04/18/41662.html
2023-06-06 02:05:591

oracle中not exists 是什么意思

exists 是Oracle sql中的一个函数.表示是否存在符合某种条件的记录.如select * from A,Bwhere A.id=B.idand exists (SELECT * FROM AWHERE A.type LIKE "S%")
2023-06-06 02:06:073

数据库中关于exists和not exists的查询都是相关子查询吗

是的
2023-06-06 02:06:244

SQL语句exists的使用

exists 后面括号中,并不关心 SELECT 后的字段列表,只关心 FROM 后面返回的结果。有结果就是 true,反之为false 如果不加上 e.deptno=d.deptno,exists()括号中的结果就跟emp 无关了。 加上 e.deptno=d.deptno:表示 如果 dept 表中存在 emp表中的empno要在dept中 资料行,并且这些emp 属于 sales 或者 research,则exists 为true。不加上 e.deptno=d.deptno:表示 只要dept中 的dname 包含 sales 或者 research,exists结果就是true,跟emp表没关系。类似于表关联,把 dname in () 括号中内容改成dept中不存在的值,查询结果就是空的了。dname in ("xxx","yyy")
2023-06-06 02:06:301

exists 是什么意思

存在
2023-06-06 02:06:372

mysql exists 和join哪个效率高

如果查询的两个表大小相当,那么用in和exists差别不大。 如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in: 例如:表A(小表),表B(大表)1:select * from A where cc in (select cc from B) 效率低,用到了A表上cc列的索引;select * from A where exists(select cc from B where cc=A.cc) 效率高,用到了B表上cc列的索引。 相反的2:select * from B where cc in (select cc from A) 效率高,用到了B表上cc列的索引;select * from B where exists(select cc from A where cc=B.cc) 效率低,用到了A表上cc列的索引。not in 和not exists如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。 in 与 =的区别 select name from student where name in ("zhang","wang","li","zhao"); 与 select name from student where name="zhang" or name="li" or name="wang" or name="zhao" 的结果是相同的。
2023-06-06 02:06:451

java file.exists 怎么用

java.io.File类的方法public boolean exists()用来判断一个文件是否存在,如:import java.io.*;public class Demo{public static void main(String[] args) throws Exception{//将p指定为文件的路径String p="test.txt";File f=new File(p);if(f.isFile()){if(f.exists()){System.out.println("文件"+p+"存在。");}else{System.out.println("文件"+p+"不存在。");}}else{System.out.println(p+"不是文件。");}}}
2023-06-06 02:07:061

Redis命令exists和hexists有什么区别吗

hexists只用来判断是否存在参数所指定的hash字段,只可以带一个参数,返回值只有1(存在)和0(不存在)两种情况。redis> HSET myhash field1 "foo"(integer) 1redis> HEXISTS myhash field1(integer) 1redis> HEXISTS myhash field2(integer) 0redis> exists用来判断key是否存在,只有1组参数时用法和hexists一样,时间复杂度也一样,所以效率没区别。Redis3.0.3之后支持多组参数,返回存在的key的数量。redis> SET key1 "Hello"OKredis> EXISTS key1(integer) 1redis> EXISTS nosuchkey(integer) 0redis> SET key2 "World"OKredis> EXISTS key1 key2 nosuchkey(integer) 2redis>
2023-06-06 02:07:131

java 中File类的exists()方法

这个貌似file类不行,你可以用net包下面的url跟httpurlconnection这两个类看看
2023-06-06 02:07:223

EXISTS关键字有什么用?

用exists和not exists代替in not in
2023-06-06 02:07:302

Excel Dictionary的exists方法怎么无效,请帮忙除错

2023-06-06 02:07:361

在SQL Server2005 中,对EXIST语句取反的方法是,在EXISTS前面添加()(

B
2023-06-06 02:07:444

SQL语句中EXISTS的作用是什麼

存在,就是说,如果存在什么什么东西,就怎么怎么样
2023-06-06 02:07:514

EXISTS的执行顺序

先是子条件。。。因为没有子条件外面条件没法执行,还有 写嵌套子查询的时候注意效率
2023-06-06 02:07:591

sql中的谓词exists的详解是什么?

1、exists 是判断的意思,通常后面有一个被判断的条件使用格式为:exists(被判断的条件)如果被判断的条件为真则返回值为真(ture),如果被判断的条件为假则返回值为假(false)2、与not exists相对,其意思恰恰和上面相反,调用格式是相同的。
2023-06-06 02:08:073

sql中in和exist语句的区别?

两者都能实现表功能查询,主要区别如下:1、适用表的类型不同。in是子查询为驱动表,外面的表为被驱动表,故适用于子查询结果集小而外面的表结果集大的情况。exists是外面的表位驱动表,子查询里面的表为被驱动表,故适用于外面的表结果集小而子查询结果集大的情况。2、子查询关联不同。exists一般都是关联子查询。对于关联子查询,必须先执行外层查询,接着对所有通过过滤条件的记录,执行内层查询。外层查询和内层查询相互依赖,因为外层查询会把数据传递给内层查询。in则一般都是非关联子查询,非关联子查询则必须先完成内层查询之后,外层查询才能介入。3、执行次数不同。IN 语句:只执行一次,确定给定的值是否与子查询或列表中的值相匹配。in在查询的时候,首先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选。所以相对内表比较小的时候,in的速度较快。EXISTS语句:执行次数根据表的长度而定。指定一个子查询,检测行的存在。遍历循环外表,然后看外表中的记录有没有和内表的数据一样的。匹配上就将结果放入结果集中。参考资料来源:百度百科--In操作符参考资料来源:百度百科--Exists
2023-06-06 02:08:591

oracle 中exists如何代替in

in后面跟子查询的情况才能改写为exists
2023-06-06 02:09:146

数据库中IN 和EXISTS有什么区别?

in是遍历内存操作,esists是查询操作,当主表数据大于字表数据时,用in,当情况相反时用esists
2023-06-06 02:09:302

oracle in和exists的区别

in 和 exists区别in 是把外表和内表作hash join,而exists是对外表作loop,每次loop再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。如果查询的两个表大小相当,那么用in和exists差别不大。如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:例如:表A(小表),表B(大表)1:select * from A where cc in (select cc from B) 效率低,用到了A表上cc列的索引;select * from A where exists(select cc from B where cc=A.cc) 效率高,用到了B表上cc列的索引。相反的2:select * from B where cc in (select cc from A) 效率高,用到了B表上cc列的索引;select * from B where exists(select cc from A where cc=B.cc) 效率低,用到了A表上cc列的索引。带in的关联子查询是多余的,因为in子句和子查询中相关的操作的功能是一样的。如:select staff_name from staff_member where staff_id in(select staff_id from staff_func where staff_member.staff_id=staff_func.staff_id); 为非关联子查询指定exists子句是不适当的,因为这样会产生笛卡乘积。如: select staff_name from staff_member where staff_id exists (select staff_id from staff_func);not in 和not exists如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。所以无论哪个表大,用not exists都比not in要快。尽量不要使用not in子句。使用minus 子句都比not in 子句快,虽然使用minus子句要进行两次查询: select staff_name from staff_member where staff_id in (select staff_id from staff_member minus select staff_id from staff_func where func_id like "81%"); in 与 "=" 的区别select name from student where name in ("zhang","wang","li","zhao");与select name from student where name="zhang" or name="li" or name="wang" or name="zhao"的结果是相同的。
2023-06-06 02:09:551

perl下exists函数怎么用

用 perldoc 如perldoc dbi
2023-06-06 02:10:022

exists在postgresql怎么用? 谢谢了

例学生表(t_student)和班级表(t_class)班级表:create table t_class ( id SERIAL not null, name VARCHAR(20) null, constraint PK_T_CLASS primary key (id));学生表:create table t_student ( id SERIAL not null, name VARCHAR(20) null, class_id INT8 null, constraint PK_T_STUDENT primary key (id));alter table t_student add constraint FK_T_STUDEN_REFERENCE_T_CLASS foreign key (class_id) references t_class (id) on delete restrict on update restrict;select * from t_student t1 where exists (select * from t_class t2 where t2.id = t1.class_id and t2.name = "一年级一班" );
2023-06-06 02:10:101

Mysql 删除表中“DROP TABLE IF EXISTS `A`” 这个语句是什么意思?

删除表Exists 方法 描述如果在 Dictionary 对象中指定的关键字存在,则返回 True,若不存在,则返回 False。(这句不是词语解释,这是数据库方法的名称!)一般drop table if exists是数据库里面的,后面接表名,如:drop table if exists xxx_book其意思是:如果数据库中存在xxx_book表,就把它从数据库中drop掉。备份sql中一般都有这样的语句,如果是数据库中有这个表,先drop掉,然后create表,然后再进行数据插入。拓展:数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。
2023-06-06 02:10:161

在asp.net里面exists的用法

不相关子查询:子查询的查询条件不依赖于父查询的称为不相关子查询。相关子查询:子查询的查询条件依赖于外层父查询的某个属性值的称为相关子查询,带EXISTS 的子查询就是相关子查询EXISTS表示存在量词:带有EXISTS的子查询不返回任何记录的数据,只返回逻辑值“True”或“False”
2023-06-06 02:10:231

SQL查询中in和exists的区别分析

in是集合查询,查询当前记录的属性值是否在一个集合中(集合或子查询)exist是存在查询,查询与当前记录关联的集合(子查询)是否存在记录
2023-06-06 02:10:434

Oracle中如何将数据用于exists

你的数据明显就是可以使用 in 的,又不能使用 in ,只好 把这一组数据写到一个表里,这样就可以不用 in 而用 exists 了。几千条数据,你做一个临时表B,把数据写入临时表B里,然后用 select * from A where exists (select 1 from B where A.id = b.id)
2023-06-06 02:10:511

mysql in和exists的区别

n 是把外表和内表作hash 连接;exists 是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。如果查询的两个表大小相当,那么用in和exists差别不大。如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in。希望对你有帮助。
2023-06-06 02:11:141

file exists是什么意思

检查文件是否存在希望能帮到你! 如果你对我的答案还满意请采纳非常感谢你的认同。谢谢。。。
2023-06-06 02:11:212

MySQL数据库代码中,两个exists语句同时出现同一查询语句中时,怎么理解,,越详细越好。,

一个用于检测子查询 一个在子查询中用于检测它的子查询
2023-06-06 02:11:362

python 中的isdir和exists区别

isdir 是判断是否是目录(文件夹) 关注的是文件的类型,而exists只是判断文件是否存在。
2023-06-06 02:11:452

请问exists谓词到底怎么用啊?

不对的 select * from tbl_a,tbl_b where tbl_a.uuid=tbl_b.uuid 这个不要用* 要指定某一列。其实exists就是和in 差不多。
2023-06-06 02:11:512

SQL 2005或2008中exists的具体用法?

应该是select DISTINCT a.* 把?正确,去掉重复时显示。应该这样理解select * from 学生 a where 学生号 in(select 学生号 from 选课)举例子应该这样举比较好 如: T1: ID Name 1 a 2 c 3 a 选取对应ID=1的Name的数据 select * from t1 a where exists(select 1 from t1 where Name=a.Name and ID=1)
2023-06-06 02:11:581

in和exists的区别,以及not in和not exists的区别

in是介词,不能单独使用,或作谓语。例句:It"s in that drawer.它放在那个抽屉里。exist是动词,可以单独作谓语。(不用于进行时)存在;实际上有。例句:Does life exist on other planets?其他行星上有生命吗?
2023-06-06 02:12:181

exist的单数为什么是exists,加s的不应该是复数吗?

不是复数,是第三人称单数这个是动词,没有复数
2023-06-06 02:12:251

oracle 中 exists和=any,有区别吗?

没有
2023-06-06 02:13:043

oracle中的exists的意思以及相当于and 或者or的什么句型 希望能举例说明 谢谢了

exists 是Oracle sql中的一个函数。表示是否存在符合某种条件的记录。如select * from A,Bwhere A.id=B.idand exists (SELECT * FROM A WHERE A.type LIKE "S%")exists 还有个功能就是 每次用到这个函数的时候就相当于测试了这条数据
2023-06-06 02:13:231

case when 语句与exists 怎么一同使用?

exists 换成 in 尝试下
2023-06-06 02:13:324

wow 宏exists 什么意思

WOW是完美
2023-06-06 02:14:014

sql中in和exists的区别效率问题 转

不要被别人误导了 要想知道真正结果 用plsql查看一下执行记录,你会有很多收获。用本人的亲身体会给你建议。
2023-06-06 02:14:094

MySQL EXISTS 怎么用呢?

在查询中 select * from table where id exists()exists中的条件只要是真这个查询就是成立的
2023-06-06 02:14:162

sql中的in转为 exists 语句

没道理的改法,为什么非要用exists来实现呢,这个语句用exists来实现并不好
2023-06-06 02:14:245