2022-02-21 21:18:40
SQL中的LIKE操作符通过通配符%和_实现模糊查询,支持开头、结尾、包含及长度匹配,结合AND/OR可构建多条件查询,使用ESCAPE处理特殊字符,并通过优化策略提升性能。
一、LIKE操作符的核心通配符示例:LIKE 'Apple%' 匹配以Apple开头的字符串(如Apple iPhone)。
示例:LIKE 'S_msung%' 匹配以S开头、第二个字符任意、后续为msung的字符串(如Samsung Galaxy)。
开头匹配
SELECT product_name FROM products WHERE product_name LIKE 'Apple%';匹配:Apple iPhone、Apple Watch。
结尾匹配
SELECT product_name FROM products WHERE product_name LIKE '%Phone';匹配:iPhone、Cordless Phone。
包含匹配
SELECT product_name FROM products WHERE product_name LIKE '%Pro%';匹配:iPhone Pro、MacBook Pro。
长度与模式匹配
恰好四个字符:SELECT product_name FROM products WHERE product_name LIKE '____';
特定位置模式:SELECT product_name FROM products WHERE product_name LIKE 'S_msung%';
排除匹配(NOT LIKE)
SELECT product_name FROM products WHERE product_name NOT LIKE '%Apple%';排除包含Apple的名称。
若需匹配字面意义的%或_,需使用ESCAPE指定转义字符:
SELECT filename FROM files WHERE filename LIKE '%20#_2023%' ESCAPE '#';AND操作符(同时满足)
SELECT product_name, description FROM products WHERE product_name LIKE '%智能%' AND description LIKE '%AI%';匹配名称含智能且描述含AI的产品。
OR操作符(满足任一)
SELECT customer_name, email FROM customers WHERE customer_name LIKE '张%' OR email LIKE '%@qq.com%';匹配姓张或邮箱为QQ邮箱的客户。
混合使用(括号明确优先级)
SELECT product_name, category FROM products WHERE category = '手机' AND (product_name LIKE '%Pro%' OR product_name LIKE '%Max%');匹配类别为手机且名称含Pro或Max的产品。
避免前导通配符
优先使用LIKE '关键词%'(通配符在末尾),利用B-tree索引加速查询。
避免LIKE '%关键词'或LIKE '%关键词%',此类查询需全表扫描。
全文搜索(Full-Text Search)
对长文本字段(如文章内容),使用数据库内置功能(如MySQL的MATCH...AGAINST)替代LIKE,通过倒排索引提升性能。
N-gram索引
将字符串拆分为固定长度子串(如2-gram)并建立索引,优化%关键词%查询,但会增加索引大小。
限制查询范围
结合其他条件缩小数据集,例如:WHERE category_id = 123 AND product_name LIKE '%Pro%';
数据结构调整
对高频模糊查询字段,可冗余存储关键词或分词结果,减少LIKE操作复杂度。
通过合理运用LIKE操作符及其优化策略,可在保证查询灵活性的同时,显著提升数据库性能。