mysql的 in 用法

文章目录

    • 一、基础用法
    • [二、IN 子查询](#二、IN 子查询)
      • [IN 单列查询](#IN 单列查询)
      • [IN 多列查询](#IN 多列查询)

一、基础用法

mysql中IN常用于WHERE表达式中,其作用是查询某个范围内的数据。

(注意:null参与任何运算的布尔值都是假)

sql 复制代码
select * from where field in (value1,value2,value3,...)

当 IN 前面加上 NOT 运算符时,表示与 IN 相反的意思,即不在这些列表项内选择

sql 复制代码
select * from where field not in (value1,value2,value3,...)

二、IN 子查询

IN 单列查询

更多情况下,IN 列表项的值是不明确的,而可能是通过一个子查询得到的:

sql 复制代码
SELECT * FROM article WHERE uid IN(
	SELECT uid FROM user WHERE status=0
)

在这个 SQL 例子里,我们实现了查出所有状态为 0 的用户(可能是被禁止)的所有文章。首先通过一个查询得到所有所有 status=0 的用户:

IN 多列查询

既然能单个字段in单列结果,那么多个字段就能in多列结果了。

sql 复制代码
SELECT
	* 
FROM
	student s 
WHERE
	( s.class, s.score ) -- student表中数据符合每个班最高分的数据筛选出来
	IN (
		SELECT class, max( score )  -- 每个班级的最高分 
		FROM student 
		GROUP BY class 
	)

查询生效时间从过去到到当日最晚的数据

sql 复制代码
SELECT
    *
FROM
    template_business
WHERE
    (
        -- 生效时间是在当天
        effective_date = CURDATE()
         OR
        (
         -- 生效时间是在过去
         effective_date < CURDATE()
         AND (tmpl_biz_type, tmpl_no, effective_date)
                     IN (
                         SELECT
                             tmpl_biz_type, tmpl_no, MAX(effective_date)
                         FROM
                             template_business
                         WHERE
                             -- 生效时间是在过去
                             effective_date < CURDATE()
                         GROUP BY
                             tmpl_biz_type, tmpl_no
                         )
        )
   ) ORDER BY tmpl_biz_type, tmpl_no, effective_date DESC
相关推荐
这个DBA有点耶1 天前
函数索引的“完全一致”有多苛刻:写法、字符集、类型,差一处就失效
数据库·mysql·代码规范
星恒随风1 天前
MySQL 从零入门(三):表的约束详解
linux·服务器·数据库·笔记·mysql
杨凯凡1 天前
MySQL 死锁怎么排查?InnoDB 锁等待与 Spring Boot 整事务重试实战
数据库·spring boot·mysql
Decay__1 天前
01_SQLServer 体系架构全解 —— 实例进程、关系引擎、SQLOS 与事务日志深入
运维·数据库·sql·mysql·架构
瑞雪兆丰年兮1 天前
JavaWeb-day07-MySQL(DQL&多表设计)
java·开发语言·数据库·sql·mysql·javaweb·web
FungLeo2 天前
成为全栈·基础补充·数据库迁移与事务:数据结构怎样安全演进
mysql·postgresql·sqlite·数据一致性·数据库事务·数据库迁移·成为全栈
aiks_yuan2 天前
MySQL GROUP BY 很慢怎么优化:加了索引反而从 1 秒变 7 秒,Using temporary 该不该消(MySQL 8.2 实测 400 万行)
mysql
数据库小学妹2 天前
MySQL大字段治理:行溢出机制、覆盖索引与拆表
数据库·mysql·性能优化
这个DBA有点耶2 天前
MySQL 8.0不可见索引:删索引怕出事,不删又拖慢写入——中间态怎么用?
数据库·mysql·代码规范
噜哥带你玩转 AI 大模型2 天前
面试加分项!CASE WHEN 两种写法、CTE 公共表表达式、四大类窗口函数,老哥一次讲透
mysql·窗口函数·cte·sql 进阶