mysql的not like in用法
时间: 2025-03-23 08:03:28 浏览: 36
### MySQL 中 NOT LIKE 与 IN 的组合用法
在 MySQL 查询中,`NOT LIKE` 和 `IN` 可以通过逻辑运算符(如 `AND` 或 `OR`)结合起来实现更复杂的过滤条件。这种组合通常用于处理多组字符串模式匹配的需求。
#### 示例场景
假设有一个名为 `users` 的表,其中包含字段 `name` 和 `status`。现在需要查找状态不在指定列表内的记录,并排除某些特定名称模式的用户。
以下是具体的 SQL 实现:
```sql
SELECT *
FROM users
WHERE status NOT IN ('inactive', 'pending')
AND name NOT LIKE '%test%'
AND name NOT LIKE '%demo%';
```
上述查询的作用如下:
- 使用 `status NOT IN ('inactive', 'pending')` 过滤掉状态为 `'inactive'` 或 `'pending'` 的记录[^3]。
- 结合两个 `NOT LIKE` 条件分别排除名字中包含 `'test'` 和 `'demo'` 的用户[^1]。
#### 高级应用:动态参数化
当涉及更多动态条件时,可以通过编程语言生成 SQL 字符串或将复杂逻辑封装到存储过程中。例如,在 Python 脚本中构建类似的查询:
```python
conditions = ["'%s'" % pattern for pattern in ['test%', '_demo']]
in_clause = ", ".join(["'inactive'", "'pending'"])
not_like_conditions = " OR ".join([f"name NOT LIKE {cond}" for cond in conditions])
query = f"""
SELECT * FROM users
WHERE status NOT IN ({in_clause})
AND ({not_like_conditions});
"""
print(query)
```
此脚本会生成类似于以下结构的 SQL 查询:
```sql
SELECT *
FROM users
WHERE status NOT IN ('inactive', 'pending')
AND (name NOT LIKE '%test%' OR name NOT LIKE '_demo');
```
#### 大小写敏感性注意事项
默认情况下,`LIKE` 不区分大小写。如果希望严格区分大小写,则可以在表达式前加上 `BINARY` 关键字[^2]。例如:
```sql
SELECT *
FROM users
WHERE BINARY name NOT LIKE 'Test%'
AND status NOT IN ('inactive', 'pending');
```
以上查询将仅忽略那些以大写字母 T 开头的名字。
---
阅读全文
相关推荐

















