MySQL - IN与NOT IN的使用方法及注意事项

通配符IN与NOT IN

1.IN介绍

IN操作符用来指定条件范围,每个括号内的条件都可以匹配,其功能类似与OR

select * from 表名 where 字段名 in(1,2,...)

下面看一看IN的用法

select num from User where num in(1,2,3);

--等价于

select num from User where num = 1 or num = 2 or num = 3;

IN拓展用法
这里涉及一点更高阶的 IN 用法,极大的减少了我们的工作量

select * from 表名 where (字段名1,字段名2...) in (能返回连个值的select语句);

这里看一个 IN() 扩展用法的实例展现

2.IN优于OR的点

  • 更清除且直观、计算次序更容易管理、执行更快;
  • 可以包含其他的selet语句,更动态的建立WHERE子句

3.NOT WHERE子句用来否定后跟条件的关键字

NOT IN的用法与IN一样,最大的区别是一个匹配包含的数据 一个拒绝匹配包含的数据

格式:

select * from 表名 where 字段名 not in(1,2,...)

在查询数据的时候有不需要包含某些数据的需求的时候就可以进行使用,特别方便

4.使用NOT IN请注意

使用not in的时,not in当中不能包含null,否则返回的结果为空,即发生not in失效情况。下面看例子

有张表,t_day 和 t_things,两张表为一一对应关系,且两张表通过 t_day 表中的 things_id 关联。
现有错误查询语句如下:

select * from t_things where id not in(
	select things_id form t_day
)

那么,如果 t_day 表中的 things_id 存在 null 值,那么这个 SQL 语句就是错误的.如果出现了这个问题,明明应该有数据,而使用 not in 却返回了空集(尽管它发生的结果与我们最初理解的not in的效果不一样,就是:不包括null则为所有非空数据),那么使用 is not null 把null剔除,使得SQL避免这种情况的发生:

select * from t_things where id not in(
	select things_id form t_day where things_id is not null
)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值