非常实用的问题 👍——“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%'关键词搜索