【数据库】模糊查询[通俗易懂]

2022-08-10 09:41:52 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

最近在项目中用到了模糊查询,之前对SQL的模糊查询也没有一个全面的认识,所以今天就跟大家一起学习一下。

数据库的查询操作包括精确查询和模糊查询,精确查询大家都很熟悉,where条件后的字段等于某个值,模糊查询则使用like代替等号。比如说根据车牌号分别实现精确查询和模糊查询:

代码语言:javascript复制
/*精确查询*/
SELECT * FROM `whitelist` WHERE platenumber = '京LYH001';
/*模糊查询*/
SELECT * FROM `whitelist` WHERE platenumber LIKE '京%'

在数据库中模糊查询主要有四种,分别是:

1.%:表示任意0个或多个字符。可匹配任意类型和长度的字符。

代码语言:javascript复制
/*查询以‘京’开头的车牌号*/
SELECT platenumber FROM `whitelist` WHERE platenumber LIKE '京%';
/*查询以‘京’结尾的车牌号*/
SELECT platenumber FROM `whitelist` WHERE platenumber LIKE '%京';
/*查询车牌号中任意地方包含‘京’的车牌号*/
SELECT platenumber FROM `whitelist` WHERE platenumber LIKE '%京%';

2._:表示任意单个字符。

代码语言:javascript复制
/*查询以‘晓洁’结尾并且姓名是三个字的车主,查询结果是李晓洁,张晓洁*/
SELECT NAME FROM carowner WHERE NAME LIKE '_晓洁';
/*查询以‘李晓’开头并且姓名是三个字的车主,查询结果是李晓洁,李晓璐*/
SELECT NAME FROM carowner WHERE NAME LIKE '李晓_';
/*查询中间是‘晓’并且姓名是三个字的车主,查询结果是李晓洁,张晓洁,李晓璐*/
SELECT NAME FROM carowner WHERE NAME LIKE '_晓_';
/*查询以‘李’开头并且姓名是三个字的车主,查询结果是李晓洁,李晓璐,李东海*/
SELECT NAME FROM carowner WHERE NAME LIKE '李__';

3.[]:表示指定范围([a-f])或集合([abcdef])中的任意单个字符。(适用于sql server,在mysql中无效)

代码语言:javascript复制
/*下面两条SQL等效,查询结果均为:
  京M00001,京M00002,京M00003,京M00004,京M00005,
  京M00006,京M00007,京M00008,京M00009*/
SELECT platenumber FROM `whitelist` WHERE platenumber LIKE '京M0000[1-9]'
SELECT platenumber FROM `whitelist` WHERE platenumber LIKE '京M0000[123456789]'

4.[^]:表示不属于指定范围([a-f])或集合([abcdef])中的任意单个字符(适用于sql server,在mysql中无效)。

代码语言:javascript复制
/*下面两条SQL等效,查询结果均为:
  京M00006,京M00007,京M00008,京M00009
  不包含以1-5结尾的车牌号*/
SELECT platenumber FROM `whitelist` WHERE platenumber LIKE '京M0000[^1-5]'
SELECT platenumber FROM `whitelist` WHERE platenumber LIKE '京M0000[^12345]'

如果是查询内容中包含了特殊字符,比如”%”、”_”、”[“、”]”,我们应该怎么查询呢?很简单,只要将特殊字符放在中括号”[]”中就可以正常查询。(适用于sql server,mysql中无效)

符号

含义

LIKE ‘5[%]’

5%

LIKE ‘[_]n’

_n

LIKE ‘[a-cdf]’

a、b、c、d 或 f

LIKE ‘[-acdf]’

-、a、c、d 或 f

LIKE ‘[ [ ]’

[

LIKE ‘]’

]

LIKE ‘abc[_]d%’

abc_d 和 abc_de

LIKE ‘abc[def]’

abcd、abce 和 abcf

总结一下:% 匹配0个或多个任意字符;_ 匹配任意单个字符;[] 匹配一个范围;[^] 排除一个范围。 以上是关于模糊查询的一些简单的认识,还有人说可以用正则表达式实现模糊查询,这个也可以研究一下。另外需要注意的是,上面的介绍都适用于SQL Server,在mysql中则只可以用”%”和”_”实现模糊查询多个或单个字符。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/105668.html原文链接:https://javaforall.cn

0 人点赞