「这是我参与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 ? |
本文转载自: 掘金