mysql中模糊查询的四种用法介绍

mysql中模糊查询的四种用法介绍

【转自】http://www.jb51.net/article/48315.htm

这篇文章主要介绍了mysql中模糊查询的四种用法,需要的朋友可以参考下
下面介绍mysql中模糊查询的四种用法: 

1,%:表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。 
比如 SELECT * FROM [user] WHERE u_name LIKE '%三%' 
将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。 
另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件 
SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%猫%' 
若使用 SELECT * FROM [user] WHERE u_name LIKE '%三%猫%' 

虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。 

2,_: 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句: 
比如 SELECT * FROM [user] WHERE u_name LIKE '_三_' 
只找出“唐三藏”这样u_name为三个字且中间一个字是“三”的; 

再比如 SELECT * FROM [user] WHERE u_name LIKE '三__'; 只找出“三脚猫”这样name为三个字且第一个字是“三”的; 

3,[ ]:表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 
比如 SELECT * FROM [user] WHERE u_name LIKE '[张李王]三' 将找出“张三”、“李三”、“王三”(而不是“张李王三”); 
如 [ ] 内有一系列字符(01234、abcde之类的)则可略写为“0-4”、“a-e” 
SELECT * FROM [user] WHERE u_name LIKE '老[1-9]' 将找出“老1”、“老2”、……、“老9”; 

4,[^ ] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。 
比如 SELECT * FROM [user] WHERE u_name LIKE '[^张李王]三' 将找出不姓“张”、“李”、“王”的“赵三”、“孙三”等; 
SELECT * FROM [user] WHERE u_name LIKE '老[^1-4]'; 将排除“老1”到“老4”,寻找“老5”、“老6”、…… 

5,查询内容包含通配符时 
由于通配符的缘故,导致我们查询特殊字符“%”、“_”、“[”的语句无法正常实现,而把特殊字符用“[ ]”括起便可正常查询。据此我们写出以下函数: 
function sqlencode(str) str=replace(str,"';","';';") 
str=replace(str,"[","[[]") ';此句一定要在最先 str=replace(str,"_","[_]") str=replace(str,"%","[%]") sqlencode=str end function
<think>好的,我现在需要帮助用户了解MySQL中模糊查询的用法,特别是LIKE语法和相关示例。根据用户提供的引用内容,我需要整理这些信息,并结合之前的回答结构来组织内容。 首先,用户提到了几个引用,其中引用[1]和[2]主要关于LIKE子句的基本语法和示例,而引用[3]和[5]提到了正则表达式和全文搜索作为替代方法。引用[4]涉及了连接查询,但用户当前的问题是关于模糊查询,所以可能需要暂时忽略这部分,除非有相关联系。 用户的上一次问题涉及C#前端的数据展示和下载,可能与数据库查询有关联,但当前问题集中在MySQL的模糊查询上,因此需要专注于这部分内容。需要确保回答结构清晰,分步骤说明,并包含示例代码,同时比较不同方法的优缺点。 接下来,我需要组织内容: 1. **LIKE子句基础**:说明基本语法,使用%和_通配符,给出简单示例,如查找包含特定字符的数据。注意转义字符的使用,如引用[2]中的例子可能需要提及。 2. **正则表达式查询**:根据引用[3],介绍REGEXP操作符,提供正则表达式的示例,如查找以某个词开头或结尾的记录,比较LIKE和正则表达式的区别。 3. **全文搜索**:引用[3]和[5]提到MATCH和AGAINST的使用,需要解释全文索引的优势,比如性能更好,支持自然语言查询,但需要创建全文索引。给出示例,并说明布尔模式的使用。 4. **性能对比与选择建议**:比较三种方法的优缺点,如LIKE简单但性能差,正则灵活但复杂,全文搜索高效但需要索引。根据用户的需求场景推荐合适的方法,比如数据量大时使用全文搜索。 5. **相关问题生成**:参考用户之前的问题,生成相关问题,如优化模糊查询性能、特殊字符处理、全文索引创建等。 需要注意引用来源,在回答中适当标注引用标识,如[^1]、[^2]、[^3]等,确保用户知道信息出处。同时,保持回答结构清晰,分点说明,代码示例用正确的格式,并标注注意事项,如通配符的位置影响性能,索引的使用条件等。 最后,检查是否有遗漏,比如用户是否可能需要知道如何在实际项目中应用这些查询,或者与其他SQL语句(如JOIN)结合使用,但根据当前问题,可能不需要深入,除非有直接关联。保持回答紧扣主题,覆盖用户的需求点。</think>以下关于MySQL模糊查询的总结整合了引用资料的核心要点,并结合实际应用场景提供完整解决方案: ### 一、LIKE子句基础用法 #### 1. 基础语法结构 ```sql SELECT {列名} FROM {表名} WHERE {字段} LIKE {匹配模式}; ``` 通配符说明: - `%`:匹配任意长度字符(含空字符) 示例:`SELECT * FROM products WHERE name LIKE '%手机%'`(查找名称含"手机"的记录)[^2] - `_`:匹配单个字符 示例:`SELECT * FROM users WHERE phone LIKE '138____8888'`(匹配138开头、8888结尾的11位号码) #### 2. 转义特殊字符 ```sql SELECT * FROM docs WHERE content LIKE '%100\%%' ESCAPE '\'; ``` 此语句匹配包含`100%`的内容(`ESCAPE`指定转义符)[^1] ### 二、进阶查询方案 #### 1. 正则表达式查询(REGEXP) ```sql SELECT * FROM articles WHERE title REGEXP '^[0-9]{4}年度报告$'; ``` 匹配以4位数字开头且以"年度报告"结尾的标题[^3] #### 2. 全文搜索(FULLTEXT) ```sql -- 创建全文索引 ALTER TABLE articles ADD FULLTEXT(title, content); -- 自然语言模式查询 SELECT * FROM articles WHERE MATCH(title, content) AGAINST('数据库优化' IN NATURAL LANGUAGE MODE); -- 布尔模式高级查询 SELECT * FROM articles WHERE MATCH(title, content) AGAINST('+MySQL -Oracle' IN BOOLEAN MODE); ``` 布尔模式支持操作符: - `+` 必须包含 - `-` 必须排除 - `"短语搜索"`[^5] ### 三、性能对比与方案选择 | 方法 | 响应速度 | 匹配精度 | 适用场景 | 索引要求 | |---------------|----------|----------|-----------------------------------|------------------| | LIKE | 慢 | 低 | 简单模式匹配 | 无法使用B树索引 | | REGEXP | 最慢 | 高 | 复杂模式匹配 | 无优化 | | FULLTEXT | 快 | 高 | 文本内容搜索(支持分词) | 需创建全文索引 | ### 四、实战建议 1. **查询优化**: - LIKE左模糊(`LIKE '%xxx'`)会导致全表扫描,建议结合`LIMIT`分页[^1] ```sql SELECT * FROM logs WHERE message LIKE '%error%' LIMIT 100 OFFSET 0; ``` - 全文搜索默认忽略50%以上文档出现的常见词,可通过`ft_stopword_file`配置停用词 2. **混合使用示例**: ```sql SELECT a.title, b.category FROM articles a JOIN categories b ON a.cat_id = b.id WHERE MATCH(a.content) AGAINST('性能优化') AND b.name LIKE '%技术%' ORDER BY a.publish_time DESC; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值