mysql的 in 用法
文章目录
- 一、基础用法
- 二、IN 子查询
- IN 单列查询
- IN 多列查询
一、基础用法
mysql中IN常用于WHERE表达式中,其作用是查询某个范围内的数据。
(注意:null参与任何运算的布尔值都是假)
select * from where field in (value1,value2,value3,…)
当 IN 前面加上 NOT 运算符时,表示与 IN 相反的意思,即不在这些列表项内选择
select * from where field not in (value1,value2,value3,…)
二、IN 子查询
IN 单列查询
更多情况下,IN 列表项的值是不明确的,而可能是通过一个子查询得到的:
SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=0
)
在这个 SQL 例子里,我们实现了查出所有状态为 0 的用户(可能是被禁止)的所有文章。首先通过一个查询得到所有所有 status=0 的用户:
IN 多列查询
既然能单个字段in单列结果,那么多个字段就能in多列结果了。
SELECT*
FROMstudent s
WHERE( s.class, s.score ) -- student表中数据符合每个班最高分的数据筛选出来IN (SELECT class, max( score ) -- 每个班级的最高分 FROM student GROUP BY class )
查询生效时间从过去到到当日最晚的数据
SELECT*
FROMtemplate_business
WHERE(-- 生效时间是在当天effective_date = CURDATE()OR(-- 生效时间是在过去effective_date < CURDATE()AND (tmpl_biz_type, tmpl_no, effective_date)IN (SELECTtmpl_biz_type, tmpl_no, MAX(effective_date)FROMtemplate_businessWHERE-- 生效时间是在过去effective_date < CURDATE()GROUP BYtmpl_biz_type, tmpl_no))) ORDER BY tmpl_biz_type, tmpl_no, effective_date DESC