mysql中的模糊查询

转载自:http://www.letuknowit.com/archives/90/

  MySQL中实现模糊查询有2种方式:一是用LIKE/NOT LIKE,二是用REGEXP/NOT REGEXP(或RLIKE/NOT RLIKE,它们是同义词)。
  第一种是标准的SQL模式匹配。它有2种通配符:“_”和“%”。“_”匹配任意单个字符,而“%”匹配任意多个字符(包括0个)。举例如下:

SELECT * FROM table_name WHERE column_name LIKE ‘m%’; #查询某字段中以m或M开头的所有记录
SELECT * FROM table_name WHERE column_name LIKE ‘%m%’; #查询某字段中包含m或M的所有记录
SELECT * FROM table_name WHERE column_name LIKE ‘%m’; #查询某字段中以m或M结尾的所有记录
SELECT * FROM table_name WHERE column_name LIKE ‘_m_’; #查询某字段中3个字符且m或M在中间的所有记录

  如果我们想查询包含通配符的字符串该怎么办呢?比如,50%或_get。答案就是:转义。可以用\来直接转义,或用ESCAPE定义转义字符来进行转义,都只是转义跟在后面的一个字符,例如:

SELECT * FROM table_name WHERE column_name LIKE ‘%50\%%’; /*第2个%被转义,查询某字段包含50%的所有记录*/
SELECT * FROM table_name WHERE column_name LIKE ‘%50/%%’ ESCAPE ‘/’; #第2个%被转义
SELECT * FROM table_name WHERE column_name LIKE ‘%\_get%’ ESCAPE ‘/’; /*“_”被转义,查询某字段包含_get的所有记录*/

  第二种是使用扩展正则表达式的模式匹配。先来看下扩展正则表达式一些字符的含义:
“.”:匹配任意单个字符
“?”:匹配前面的子表达式0次或1次。
“+”:匹配前面的子表达式1次或多次。
“*”:匹配前面的子表达式0次或多次。x*,表示0个或多个x字符;[0-9]*,匹配任何数量的数字。
“^”:表示匹配开始位置。
“$”:表示匹配结束位置。
“[]”:表示一个集合。[hi],表示匹配h或i;[a-d],表示匹配a、b、c、d中任一个。
“{}”:表示重复的次数。8{5},表示匹配5个8,即88888;[0-9]{5,11},表示匹配5到11个数字。
  再来看个例子:

SELECT * FROM table_name WHERE column_name REGEXP ‘^50%{1,3}’; /*查询某字段中以50%、50%%或50%%%开头的所有记录*/

时间: 2024-11-07 23:17:34

mysql中的模糊查询的相关文章

MySql中like模糊查询%百分号之间使用变量值

条件::::表first(a:关键字),表later(b:含有关键字a的字段) 问题::::在表first中,a 作为表later中b查询条数的关键字,分别查出每个关键字a对应表later中b含有的条数? 如:a 含有 12,13,11 b 含有 145,124,135,125,111 查询结果:: a   count(b) 12 2 13 1 11 1 实现代码:: SELECT a,COUNT(b) FROM later,first WHERE b LIKE CONCAT('%',a,'%'

PHP MYSQL登陆和模糊查询

PHP MYSQL登陆和模糊查询 PHP版本 5.5.12    MYSQL版本 5.6.17  Apache 2.4.9 用的wampserver 一.PHPMYSQL实现登陆:  一共含有两个文件:login.php和logincheck.php; 表单代码: <form action="logincheck.php"method="post"> Yonghu:<inputtype="text" name="use

mongo中的模糊查询

以下是一个mongo查询的综合应用,即介绍一个生产中实际应用的模糊查询,当然其实也很简单,主要用到mongo中的模糊查询和$or查询,以及并的关系,下面是一个mongo中的一条记录 { "_id" : "ffe6a068-9043-4334-97d2-75387340e655", "file_id" : "ffe6a068-9043-4334-97d2-75387340e655", "name" : &qu

MySQL中IN子查询会导致无法使用索引

原文:MySQL中IN子查询会导致无法使用索引 今天看到一个博客园的一篇关于MySQL的IN子查询优化的案例,一开始感觉有点半信半疑(如果是换做在SQL Server中,这种情况是绝对不可能的,后面会做一个简单的测试.)随后动手按照他说的做了一个表来测试验证,发现MySQL的IN子查询做的不好,确实会导致无法使用索引的情况(IN子查询无法使用所以,场景是MySQL,截止的版本是5.7.18) MySQL的测试环境 测试表如下 create table test_table2 ( id int a

mysql中的高级查询

mysql中的高级查询 以前学习的查询语法:   select 字段名 from 表名 where 条件   其实,查询的语法变化很多: 1. select 可以查询表达式, 表达式就是 运算符+操作数. 比如 1 + 1   2 * 3  2-1+5*9   Math.random() * 1; 可以看出,数据库中,字符串+字符串不是拼接,而是计算加法, 试一试,拿着'1' + 'a123'. 扩充,如果非要让两个字符串是拼接,咋办? 2. 表的别名     其实列也可以起别名:   3. d

转 mysql 中sql 语句查询今天、昨天、7天、近30天、本月、上一月 数据

转自 http://blog.csdn.net/ve_love/article/details/19685399 转 mysql 中sql 语句查询今天.昨天.7天.近30天.本月.上一月 数据

09-JS中table模糊查询

JS中table模糊查询 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 </head> 7 <body> 8 <input type="text" name="" id="txt1" value="&q

【Django】Django中的模糊查询以及Q对象的简单使用

Django中的模糊查询: 需要做一个查找的功能,所以需要使用到模糊查询. 使用方法是:字段名加上双下划线跟上contains或者icontains,icontains和contains表示是否区分大小写. 实测icontains为不区分大小写,contains为区分大小写. from djangp.db.models import Q def select_seller(request,keyword): seller_info= Seller.objects.filter(Q(usernam

Mysql中的关联查询(内连接,外连接,自连接)

Mysql中的关联查询(内连接,外连接,自连接) 在使用数据库查询语句时,单表的查询有时候不能满足项目的业务需求,在项目开发过程中,有很多需求都是要涉及到多表的连接查询,总结一下mysql中的多表关联查询 一,内连接查询 是指所有查询出的结果都是能够在连接的表中有对应记录的. 以t_employee(员工表)和t_dept(部门表)为例: t_employee表中的记录如下:dept代表该员工所在的部门 t_dept表中记录如下: 可以发现,其中人力资源部里没有员工(这里只是举例,可能与实际不符