SQLite - AND 和 OR 子句
SQLite - 使用 AND 和 OR 组合条件
Section titled “SQLite - 使用 AND 和 OR 组合条件”AND 和 OR 运算符是在 WHERE 子句中使用的连接运算符,用于根据多个条件过滤数据。它们是构建强大而精确查询的基础。
AND 运算符
Section titled “AND 运算符”AND 运算符仅在所有指定条件都评估为 true 时才返回一行。它通过添加连续的要求来缩小搜索范围。
SELECT column_listFROM table_nameWHERE [condition1] AND [condition2] AND ... [conditionN];使用我们的 employees 表,我们来查找所有年龄大于 25 岁并且在 ‘Sales’ 部门工作的员工。
SELECT * FROM employees WHERE age > 25 AND department = 'Sales';
id | name | age | address | salary---|------|-----|------------|--------1 | Paul | 32 | California | 50000.0此查询仅返回 ‘Paul’,因为他是唯一同时满足这两个条件的员工。
OR 运算符
Section titled “OR 运算符”OR 运算符在任何指定条件评估为 true 时返回一行。它通过包含符合多个条件中任意一个的行来扩大搜索范围。
SELECT column_listFROM table_nameWHERE [condition1] OR [condition2] OR ... [conditionN];我们来查找所有年龄大于 30 岁或者薪资大于 60000.00 的员工。
SELECT * FROM employees WHERE age > 30 OR salary > 60000;
id | name | age | address | salary---|------|-----|------------|--------1 | Paul | 32 | California | 50000.04 | Mark | 25 | Rich-Mond | 65000.05 | David| 27 | Texas | 85000.0‘Paul’ 被包含进来是因为他的年龄超过 30 岁。‘Mark’ 和 ‘David’ 被包含进来是因为他们的薪资超过 60000,即使他们的年龄没有超过 30 岁。
最佳实践:使用括号组合 AND 和 OR
Section titled “最佳实践:使用括号组合 AND 和 OR”常见的 Bug 来源是误解运算符优先级。SQLite 在评估 OR 运算符之前会评估 AND 运算符。为了确保您的逻辑正确执行并提高可读性,请始终使用括号 () 来明确分组您的条件。
假设您想查找所有来自 ‘Texas’ 或 ‘California’ 且年龄大于 25 岁的员工。没有括号,查询是模糊的。
-- Incorrect and ambiguous querySELECT * FROM employees WHERE address = 'Texas' OR address = 'California' AND age > 25;正确的写法是分组 OR 条件:
-- Correct and clear querySELECT * FROM employeesWHERE (address = 'Texas' OR address = 'California') AND age > 25;
id | name | age | address | salary---|------|-----|------------|--------1 | Paul | 32 | California | 50000.05 | David| 27 | Texas | 85000.0使用括号消除了所有歧义,并确保您的查询行为完全符合预期。