【数据库】模糊查询

来源:互联网 发布:海口关键词优化排名 编辑:程序博客网 时间:2024/06/08 03:07

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

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

/*精确查询*/SELECT * FROM `whitelist` WHERE platenumber = '京LYH001';/*模糊查询*/SELECT * FROM `whitelist` WHERE platenumber LIKE '京%'
  在数据库中模糊查询主要有四种,分别是:

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

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

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

/*查询以‘晓洁’结尾并且姓名是三个字的车主,查询结果是李晓洁,张晓洁*/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中无效)

/*下面两条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中无效)

/*下面两条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'_nLIKE '[a-cdf]'a、b、c、d 或 fLIKE '[-acdf]'-、a、c、d 或 fLIKE '[ [ ]'[LIKE ']']LIKE 'abc[_]d%'abc_d 和 abc_deLIKE 'abc[def]'abcd、abce 和 abcf   

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


原创粉丝点击