「这是我参与11月更文挑战的第 8 天,活动详情查看:2021最后一次更文挑战」
本章主要介绍基本的 where 子查询,学会如何使用基本的比较操作符,以及如何应对日常中最常见的查询需求
where 查询
上一篇文章介绍了基础的查询+排序,这一种是查出来全部数据。有时候我们需要用一些条件来对数据做过滤,这里需要使用关键字 where
在 where 的条件查询中,我们一般会使用到如下比较符:
>,匹配字段里大于某个值的全部记录<,匹配小于某个值的记录=,精准匹配值相等的记录,常见于 id 查询<> 或 !=,判断为不等于某个值的记录between..and..判断字段的值位于某个区间,可以拆分为两个条件组合判断,即column>? and column<?and多个条件组合判断or多个条件或判断in判断字段的值是否位于某个集合中 这个集合通常会有多个候选值is null判断字段为空is not null判断值非空
需要 null 判断,是因为我们在建表的时候,有的字段允许为空,且未设计默认值,故此类型的字段则默认未 null
这里列举常见条件查询
根据指定字段查询
以我们最常使用的 id 字段为例
1 | sql复制代码select * from rfid_info where id=? |
因为 id 在表设计时通常作为主键,上述的操作会查询出唯一的一条记录。有时我们需要多个字段进行筛选,如下 sql
1 | sql复制代码-- 1 |
强烈建议,
and, or两种操作符尽可能的不要同一级进行组合判断,这样的操作可能会匹配不到我们希望的结果。最佳实践是,根据语义,用()吧相关的条件包裹起来,这样会减少不必要的失误
根据 id 集合查询多个
我们可以在 java 中查询出全部数据,再使用 Stream.filter() 过滤出满足 id 的数据,但非常不推荐
推荐使用 in 在数据库层面上直接处理好数据进行返回。在 sql 拼接时,需要吧 id 的集合转化为 (1, 2, ...) 的格式,用小括号包裹,用 , 隔开
1 | sql复制代码select * from rfid_info where id in (1,2,3) |
范围筛选
我们可以使用 >, < 来判断日期类型数据的大小(对于字符串类型,mysql 中使用 ascll 码进行大小的比较)
1 | sql复制代码select * from rfid_info where time>? and name<? |
对于选取满足区间条件的 sql,可以使用 between 关键字
1 | sql复制代码select * from rfid_info where time between ? and ? |
本文转载自: 掘金