通配符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
)
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐