上一篇
数据库中的like怎么用or
- 数据库
- 2025-08-19
- 5
数据库中,
LIKE
与
OR
连用实现多模式模糊匹配,如:
SELECT FROM 表 WHERE 字段 LIKE '值1' OR LIKE '值2'
数据库查询中,LIKE
是一个非常重要的操作符,它允许用户进行模糊匹配查找,当需要结合多个条件时,可以使用逻辑运算符OR
来扩展搜索范围,以下是关于如何在SQL中使用LIKE
与OR
的详细说明:
LIKE
的基本用法
- 功能:“LIKE”是SQL中用于在
WHERE
子句里对字符串类型数据执行模式匹配的操作符,能实现模糊查询,常搭配通配符一同使用,百分号(%)可匹配零个或多个字符;下划线(_)则匹配单个字符,若要查找名字包含“John”的学生记录,可在名为students
且有name
列的表中编写如下语句:SELECT FROM students WHERE name LIKE '%John%';
此句会选出所有name
字段值里含有“John”的行。 - 常见示例
|需求描述|对应SQL语句|解释|
|—-|—-|—-|
|查找以特定前缀开头的数据,如找姓张的员工信息(假设员工表为employees,姓名字段是name)|SELECT FROM employees WHERE name LIKE '张%';
|这里的“张%”表示名字以“张”开头,后面跟着任意数量的字符|
|查找以特定后缀结尾的数据,比如找出域名以.com结尾的网址记录(设网址存储在websites表的url列)|SELECT FROM websites WHERE url LIKE '%.com';
| “%.com”意味着只要网址最后是.com就符合条件,前面的内容不限|
|精准定位中间含某固定片段的内容,像搜索商品名称中含有“手机”的商品信息(商品表叫products,商品名称对应name列)|SELECT FROM products WHERE name LIKE '%手机%';
|该写法能筛选出名称里任意位置出现“手机”的商品|
|按指定格式查询确定长度的信息,例如查询电话号码格式为三位区号加八位号码的记录(电话存于phone_numbers表的phone_num列)|SELECT FROM phone_numbers WHERE phone_num LIKE '___-__________';
|每个下划线代表一个数字,严格按此位数和格式匹配|
OR
在多条件组合中的应用
实际场景里,往往需同时满足多个可能的模式之一,这时就要引入OR
连接不同的LIKE
条件,从客户表customers里找出来自北京或者上海的客户,可这样写:SELECT FROM customers WHERE city LIKE '北京%' OR city LIKE '上海%';
,这条语句表明,只要城市的值要么以“北京”开头,要么以“上海”开头,就会被选中。
再看一个例子,若要在书籍表books中检索作者要么是“鲁迅”,要么是“老舍”的书籍,相应的SQL应为:SELECT FROM books WHERE author LIKE '鲁迅%' OR author LIKE '老舍%';
,通过这种方式,能够灵活地整合多个模糊匹配条件,大大拓宽了数据检索的范围。
复合条件的注意事项
- 优先级问题:由于
OR
的优先级低于其他一些逻辑运算符(如AND
),所以在复杂的表达式中,建议使用括号来明确运算顺序,如果想要先计算两个LIKE
条件的或关系,再与其他条件进行与操作,应该写成:WHERE (condition1 LIKE pattern1 OR condition2 LIKE pattern2) AND another_condition = value
,这样可以避免因优先级导致的意外结果。 - 性能考虑:大量使用
LIKE
和OR
可能会影响查询性能,特别是在大数据集上,因为全表扫描通常是不可避免的,而且多个LIKE
条件会增加CPU的处理负担,为了优化性能,可以考虑以下方法:一是创建合适的索引,虽然普通的B树索引对LIKE '%...'
这种开头就是通配符的情况帮助不大,但对于形如LIKE 'prefix%'
的模式有一定效果;二是尽量减少不必要的通配符使用,使模式尽可能具体;三是如果业务允许,尝试改写为等价但更高效的查询方式,比如使用全文索引或其他文本搜索技术。 - 转义字符的使用:在某些特殊情况下,可能需要用到转义字符来解决特殊符号冲突的问题,如果模式本身包含了方括号、百分号等特殊字符,可以使用
ESCAPE
子句来定义转义符,假设有一个安全破绽编号系统,其中有些ID带有特殊的正则表达式元字符,此时可以这样写:SELECT FROM vulnerabilities WHERE id LIKE '%-HACKER\_BACKDOOR-%' ESCAPE '\';
这里将反斜杠()作为转义字符,使得原本会被误解的特殊符号得以正确解析。
实战案例演示
假设有一个新闻文章表news_articles,包含标题title、内容content等字段,现在想要查找标题或者内容中出现了关键词“科技”或者“创新”的文章,可以使用如下SQL:
SELECT title, content FROM news_articles WHERE title LIKE '%科技%' OR title LIKE '%创新%' OR content LIKE '%科技%' OR content LIKE '%创新%';
这个查询会返回所有标题或内容中含有“科技”或者“创新”的文章,也可以进一步简化,利用括号分组提高可读性:
SELECT title, content FROM news_articles WHERE (title LIKE '%科技%' OR title LIKE '%创新%') OR (content LIKE '%科技%' OR content LIKE '%创新%');
两种写法效果相同,但后者结构更清晰。
FAQs
- Q:
LIKE
操作符大小写敏感吗?
A: 这取决于具体的数据库管理系统(DBMS),大多数情况下,默认是大小写不敏感的,但可以通过设置特定的排序规则(collation)来改变这种行为,MySQL中的utf8mb4_general_ci排序规则就是大小写不敏感的,而utf8mb4_bin则是大小写敏感的,在使用LIKE
时需要注意当前数据库的配置。 - Q: 如何提高带有多个
LIKE
条件的查询效率?
A: 除了前面提到的创建索引外,还可以考虑以下几点:一是尽量减少通配符的使用范围,尽量让左边的部分固定,例如优先使用LIKE 'prefix%'
而不是LIKE '%suffix'
;二是分析数据的分布特点,选择区分度高的前缀作为过滤条件;三是对于频繁使用的复杂模式匹配,可以考虑建立反向索引或者其他高级特性支持。
熟练掌握LIKE
与OR
的结合使用,能够让我们在数据库查询中更加得心应