MYSQL in和exists

目录

一、in

二、exists

三、区别


一、in

解释:in 进行子查询时,内层语句仅返回一个数据列,数据列的值提供给外层语句进行比较操作。

语法格式:select * from table_1 where id in (select id from table_2 );

中文注释:select * from 表名 where 字段 in (子查询/结果集);

用法:

select * from table_1 where id in (select id from table_2 where name = '张三');

二、exists

解释:exists的右操作数是一个子查询,这个子查询是用来做存在性检查的,若子查询的行存在结果,即子查询能够找到匹配的记录,exists的结果为ture,否则为false。
使用EXISTS时,若子查询有结果,则返回true,外表能够提取查询数据。
使用NOT EXISTS时,若子查询找不到匹配记录,则返回true,外表能够提取查询数据。

语法格式:select * from table_1 where  exists (select 1 from table_2 where  table_1.id=table_2.id);

中文注释:select * from 表名 where   exists (子查询条件筛选);

用法:

select * from table_1 where  exists (select 1 from table_2 where  table_1.id=table_2.id)

三、区别

1、 IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况;内外表一样,用那个都行。

2、使用IN时,IN不对NULL进行处理,exists会对NULL进行处理。

3、in可以走索引,但数据量过大就不走索引,not in、exist、not exists也都可以走索引,但数据库版本不同也会有区别,最好是测试一下

4、exists,not exists一般是与子查询使用;in,not in可以与子查询使用,也可以直接in ('a','b',......,'结果集')。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值