非常实用的问题 👍——“SQL 多字段条件查询” 是数据库查询中最常见的场景之一。下面我帮你从基础语法 → 动态组合条件 → 模糊匹配 / 可选条件 全面讲解。
🧩 一、最基础写法
假设有一张表:
users(id, name, age, gender, city)
最常见的多字段条件查询写法是:
SELECT *
FROM users
WHERE age > 25
AND gender = 'M'
AND city = 'Shanghai';
📌 AND
表示所有条件都满足;
📌 OR
表示满足任意一个条件。
🧩 二、使用 OR 实现多字段匹配
比如要查 名字是“张三”或“李四” 的用户:
SELECT *
FROM users
WHERE name = '张三' OR name = '李四';
或:
SELECT *
FROM users
WHERE name IN ('张三', '李四');
🧩 三、模糊查询(LIKE)
SELECT *
FROM users
WHERE name LIKE '%张%'
AND city LIKE '%上%';
📌 %
表示任意字符;
%张%
:包含“张”的字符串;张%
:以“张”开头;%张
:以“张”结尾。
🧩 四、可选条件(动态查询)
有时前端传入的查询条件不确定(例如搜索框为空时忽略该条件)。
可以这样写 👇:
SELECT *
FROM users
WHERE (@name IS NULL OR name LIKE CONCAT('%', @name, '%'))
AND (@age IS NULL OR age = @age)
AND (@city IS NULL OR city = @city);
📌 含义:
- 如果传入参数
@name
是空,就跳过name
条件; - 如果不为空,就按条件过滤。
✅ 这种写法在 SQL Server / MySQL / PostgreSQL 中都兼容。
🧩 五、范围查询
SELECT *
FROM users
WHERE age BETWEEN 20 AND 30
AND city = 'Beijing';
等价于:
WHERE age >= 20 AND age <= 30
🧩 六、组合复杂条件(括号很重要)
比如要查:
年龄大于30的男性,或者 居住在北京的女性。
SELECT *
FROM users
WHERE (age > 30 AND gender = 'M')
OR (city = 'Beijing' AND gender = 'F');
🧩 七、模糊搜索多字段(关键词匹配)
如果想让一个关键字匹配多个字段,可以用 OR
:
SELECT *
FROM users
WHERE name LIKE '%张%'
OR city LIKE '%张%'
OR gender LIKE '%张%';
或者更优雅地用 CONCAT
(MySQL):
SELECT *
FROM users
WHERE CONCAT(name, city, gender) LIKE '%张%';
🧩 八、在应用层动态拼接条件(后端代码)
例如在 C# / Java / Python 中构造 SQL:
string sql = "SELECT * FROM users WHERE 1=1";
if (!string.IsNullOrEmpty(name))
sql += " AND name LIKE '%" + name + "%'";
if (age != null)
sql += " AND age = " + age;
if (!string.IsNullOrEmpty(city))
sql += " AND city = '" + city + "'";
📌 实际项目中建议用参数化查询防止 SQL 注入。
🚀 九、总结表格
类型 | 语法示例 | 说明 |
---|---|---|
AND 多条件 | WHERE a=1 AND b=2 | 所有条件同时满足 |
OR 多条件 | WHERE a=1 OR b=2 | 任意条件满足 |
模糊匹配 | WHERE name LIKE '%张%' | 模糊搜索 |
IN 查询 | WHERE id IN (1,2,3) | 多值匹配 |
可选条件 | WHERE (@v IS NULL OR col=@v) | 忽略空条件 |
范围查询 | WHERE age BETWEEN 20 AND 30 | 区间查询 |
多字段模糊 | WHERE CONCAT(a,b,c) LIKE '%key%' | 关键词搜索 |
发表回复