十二、DQL-模糊查询

四哥1个月前MySQL42

引言

模糊查询即模糊检索,是指搜索系统自动按照用户输入关键词的同义词进行模糊检索,从而得出较多的检索结果。与之相反的是“精准搜索”。模糊检索也可以说是同义词检索,这里的同义词是用户通过“检索管理”中的“同义词典”来配置的。

用户在检索页面中输入同义词中任何一个词检索时,只要选中“模糊检索”复选框,则该关键词的所有同义词信息也都被检索出来。

举例:例如配置了“电脑”与“computer”为同义词后,检索“电脑”,则包含“computer”的网页也会出现在检索结果中。

目录

  • 模糊查询概述

  • 模糊查询应用

1、模糊查询概述

1.1、什么是模糊查询

模糊查询是针对字符串操作的,类似正则表达式,没有正则表达式强大。

1.2、通配符

%:表示任意0个或多个字符。
_: 表示任意单个字符。
[ ]:表示括号内所列字符中的一个(类似正则表达式)。
[^ ] :表示不在括号所列之内的单个字符。

1.3、回顾%和_

1.3.1、%应用

可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。

格式:
select */字段列表 from 数据库表名 where 字段名 like %字符串%;

案例:

查询出学生信息表中姓名里有‘三’的学生信息

mysql> select * from students where sname like '%三%';
+------+--------+------+------+---------+------+------------+-----------------+
| sid  | sname  | sex  | age  | english | math | entertime  | remark          |
+------+--------+------+------+---------+------+------------+-----------------+
| 1    | 张三 | 男  | 19   | 98.5    | 88.0 | 2017-09-01 | 他来自四川 |
| 5    | 李三 | 男  | 19   | 60.0    | 88.0 | 2017-09-01 | 他来自湖北 |
+------+--------+------+------+---------+------+------------+-----------------+
2 行于数据集 (0.02 秒)

1.3.2、_应用

匹配单个任意字符,它常用来限制表达式的字符长度语句。

格式:
select */字段列表 from 数据库表名 where 字段名 like _字符串_;

案例:

查询学生信息表中姓名里含有‘红’字,二个字的学生信息

mysql> select * from students where sname like '_红' or sname like '红_';
+------+--------+------+------+---------+------+------------+-----------------+
| sid  | sname  | sex  | age  | english | math | entertime  | remark          |
+------+--------+------+------+---------+------+------------+-----------------+
| 3    | 张红 | 女  | 19   | 86.0    | 80.0 | 2017-09-01 | 他来自北京 |
| 7    | 刘红 | 女  | 18   | 90.0    | 98.0 | 2017-09-01 | 他来自甘肃 |
+------+--------+------+------+---------+------+------------+-----------------+
2 行于数据集 (0.01 秒)

2、模糊查询应用

2.1、[  ]应用

指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。

格式:
select */字段列表 from 数据库表名 where 字段名 regexp [字符串]字符串;

案例:

查询学生信息表中姓名里有张和李的人的信息

mysql> select * from students where sname regexp '[张李]';
+------+-----------+------+------+---------+------+------------+-----------------+
| sid  | sname     | sex  | age  | english | math | entertime  | remark          |
+------+-----------+------+------+---------+------+------------+-----------------+
| 1    | 张三    | 男  | 19   | 98.5    | 88.0 | 2017-09-01 | 他来自四川 |
| 2    | 李四    | 男  | 20   | 80.0    | 88.0 | 2017-09-01 | 他来自重庆 |
| 3    | 张红    | 女  | 19   | 86.0    | 80.0 | 2017-09-01 | 他来自北京 |
| 4    | 张八    | 男  | 18   | 80.0    | 85.0 | 2017-09-01 | 他来自天津 |
| 5    | 三李    | 男  | 19   | 60.0    | 88.0 | 2017-09-01 | 他来自湖北 |
| 9    | 李老六 | 男  | 19   | NULL    | NULL | NULL       | NULL            |
+------+-----------+------+------+---------+------+------------+-----------------+
6 行于数据集 (0.02 秒)

查询学生信息表中姓名为张红和李红的人的信息

#[张李]红  张红 李红
mysql> select * from students where sname regexp '[张李]红';
+------+--------+------+------+---------+------+------------+-----------------+
| sid  | sname  | sex  | age  | english | math | entertime  | remark          |
+------+--------+------+------+---------+------+------------+-----------------+
| 3    | 张红 | 女  | 19   | 86.0    | 80.0 | 2017-09-01 | 他来自北京 |
+------+--------+------+------+---------+------+------------+-----------------+
1 行于数据集 (0.01 秒)

查询学生信息表中年龄包含789这几个数字的人的信息

mysql> select * from students where age regexp '[789]';
+------+-----------+------+------+---------+------+------------+-----------------+
| sid  | sname     | sex  | age  | english | math | entertime  | remark          |
+------+-----------+------+------+---------+------+------------+-----------------+
| 1    | 张三    | 男  | 19   | 98.5    | 88.0 | 2017-09-01 | 他来自四川 |
| 3    | 张红    | 女  | 19   | 86.0    | 80.0 | 2017-09-01 | 他来自北京 |
| 4    | 张八    | 男  | 18   | 80.0    | 85.0 | 2017-09-01 | 他来自天津 |
| 5    | 三李    | 男  | 19   | 60.0    | 88.0 | 2017-09-01 | 他来自湖北 |
| 7    | 刘红    | 女  | 18   | 90.0    | 98.0 | 2017-09-01 | 他来自甘肃 |
| 9    | 李老六 | 男  | 19   | NULL    | NULL | NULL       | NULL            |
+------+-----------+------+------+---------+------+------------+-----------------+
6 行于数据集 (0.01 秒)

注意:

如 [ ] 内有一系列字符(01234、abcde之类的)则可略写为“0-4”、“a-e”

2.2、[^]应用

其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。

格式:
select */字段列表 from 数据库表名 where 字段名 regexp [^字符串]字符串;

案例:

查询学生信息表中姓名不是张红、李红,而是其他红的人的信息。

mysql> select * from students where sname regexp '[^张李]红';
+------+--------+------+------+---------+------+------------+-----------------+
| sid  | sname  | sex  | age  | english | math | entertime  | remark          |
+------+--------+------+------+---------+------+------------+-----------------+
| 7    | 刘红 | 女  | 18   | 90.0    | 98.0 | 2017-09-01 | 他来自甘肃 |
+------+--------+------+------+---------+------+------------+-----------------+
1 行于数据集 (0.01 秒)

查询学生信息表中年龄不包含7891这几个数字的人的信息

mysql> select * from students where age regexp '[^7891]';
+------+--------+------+------+---------+------+------------+-----------------+
| sid  | sname  | sex  | age  | english | math | entertime  | remark          |
+------+--------+------+------+---------+------+------------+-----------------+
| 2    | 李四 | 男  | 20   | 80.0    | 88.0 | 2017-09-01 | 他来自重庆 |
| 6    | 王六 | 女  | 20   | 50.0    | 70.0 | 2017-09-01 | 他来自湖南 |
+------+--------+------+------+---------+------+------------+-----------------+
2 行于数据集 (0.01 秒)

查询学生信息表中姓张和姓李的人的信息

mysql> select * from students where sname regexp '^[张李]';
+------+-----------+------+------+---------+------+------------+-----------------+
| sid  | sname     | sex  | age  | english | math | entertime  | remark          |
+------+-----------+------+------+---------+------+------------+-----------------+
| 1    | 张三    | 男  | 19   | 98.5    | 88.0 | 2017-09-01 | 他来自四川 |
| 2    | 李四    | 男  | 20   | 80.0    | 88.0 | 2017-09-01 | 他来自重庆 |
| 3    | 张红    | 女  | 19   | 86.0    | 80.0 | 2017-09-01 | 他来自北京 |
| 4    | 张八    | 男  | 18   | 80.0    | 85.0 | 2017-09-01 | 他来自天津 |
| 9    | 李老六 | 男  | 19   | NULL    | NULL | NULL       | NULL            |
+------+-----------+------+------+---------+------+------------+-----------------+
5 行于数据集 (0.01 秒)

注意:

^[]表示的是:字符串开始的第一个字符


相关文章

九、DQL-分组语句

九、DQL-分组语句

引言数据分组是根据统计研究的需要,将原始数据按照某种标准划分成不同的组别,分组后的的数据称为分组数据。数据分组应遵循两个基本原则:穷尽性原则这一原则就是要求调查的每一单位都能无一例外地划归到某一组去,...

十五、多表连接查询

十五、多表连接查询

引言连接查询是关系数据库中最主要的查询,主要包括内连接、外连接和交叉连接等。通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。 在关系数据...

八、DQL-排序语句

八、DQL-排序语句

引言排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序,若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。反之,若参加排序...

七、DQL语句

七、DQL语句

引言DQL(Data QueryLanguage )数据查询语言,基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块。目录DQL概述记录查询条件查询1、DQL概述1.1、什么是DQ...

十四、表与表之间关系

十四、表与表之间关系

引言可以在数据库图表中的表之间创建关系,以显示一个表中的列与另一个表中的列是如何相链接的。在一个关系型数据库中,利用关系可以避免多余的数据。目录表与表之间关系概述一对多应用一对一应用多对多应用1、表与...

十、DQL-聚合函数

十、DQL-聚合函数

引言SQL基本函数,聚合函数对一组值执行计算,并返回单个值,也被称为组函数。聚合函数对一组值执行计算并返回单一的值。除 COUNT 以外,聚合函数忽略空值,如果COUNT函数的应用对象是一个确定列名,...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。