sql-and-or-clauses
SQL - 使用 AND 和 OR 进行筛选
Section titled “SQL - 使用 AND 和 OR 进行筛选”SQL 中的 AND 和 OR 运算符是复杂数据筛选的基础。它们在 WHERE 子句中用于组合多个条件,使你能够创建精确且功能强大的查询。
让我们为所有示例使用一个 customers 示例表:
CREATE TABLE customers ( id INT PRIMARY KEY, name VARCHAR(20) NOT NULL, age INT NOT NULL, city VARCHAR(25), salary DECIMAL(18, 2));
INSERT INTO customers VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00), (2, 'Khilan', 25, 'Delhi', 1500.00), (3, 'Kaushik', 23, 'Kota', 2000.00), (4, 'Chaitali', 25, 'Mumbai', 6500.00), (5, 'Hardik', 27, 'Bhopal', 8500.00), (6, 'Komal', 22, 'Hyderabad', 4500.00), (7, 'Muffy', 24, 'Indore', 10000.00);SQL AND 运算符
Section titled “SQL AND 运算符”如果由 AND 分隔的所有条件都为 TRUE,AND 运算符就会显示一条记录。它用于缩小搜索结果范围。
SELECT column1, column2, ...FROM table_nameWHERE condition1 AND condition2 AND condition3 ...;示例:查找孟买的富裕客户
Section titled “示例:查找孟买的富裕客户”让我们查找居住在“孟买”并且薪水大于 6000 的客户。
SELECT id, name, city, salaryFROM customersWHERE city = 'Mumbai' AND salary > 6000;此查询只返回“Chaitali”,因为她是唯一一个满足这两个条件的客户。
| ID | NAME | CITY | SALARY |
|---|---|---|---|
| 4 | Chaitali | Mumbai | 6500.00 |
SQL OR 运算符
Section titled “SQL OR 运算符”如果由 OR 分隔的任何条件为 TRUE,OR 运算符就会显示一条记录。它用于扩大搜索结果范围。
SELECT column1, column2, ...FROM table_nameWHERE condition1 OR condition2 OR condition3 ...;示例:查找来自 Kota 或 Delhi 的客户
Section titled “示例:查找来自 Kota 或 Delhi 的客户”让我们查找居住在“Kota”或“Delhi”的客户。
SELECT id, name, cityFROM customersWHERE city = 'Kota' OR city = 'Delhi';这将返回“Khilan”(来自 Delhi)和“Kaushik”(来自 Kota)。
| ID | NAME | CITY |
|---|---|---|
| 2 | Khilan | Delhi |
| 3 | Kaushik | Kota |
组合 AND 和 OR:括号的重要性
Section titled “组合 AND 和 OR:括号的重要性”当你在同一个查询中组合 AND 和 OR 时,你必须控制操作的顺序。SQL 在 OR 之前评估 AND。为了确保你的逻辑正确且易读,请始终使用括号 () 来分组你的条件。
示例:查找来自大城市的年轻客户
Section titled “示例:查找来自大城市的年轻客户”我们想查找年龄小于 25 岁并且居住在“孟买”或“德里”的客户。
SELECT id, name, age, cityFROM customersWHERE age < 25 AND (city = 'Mumbai' OR city = 'Delhi');如果没有括号,查询 WHERE age < 25 AND city = 'Mumbai' OR city = 'Delhi' 将被解释为 (age < 25 AND city = 'Mumbai') OR city = 'Delhi',这是一个不同的问题,会产生不同的结果。括号是必不可少的。
| ID | NAME | AGE | CITY |
|---|
注意:在我们的示例数据中,没有 25 岁以下的人居住在孟买或德里,因此结果为空。如果“Khilan”是 24 岁,他将出现在这里。
在 UPDATE 和 DELETE 语句中使用 AND/OR
Section titled “在 UPDATE 和 DELETE 语句中使用 AND/OR”这些运算符对于修改数据和查询数据同样重要。
带有 AND 的 UPDATE
Section titled “带有 AND 的 UPDATE”给年龄大于 30 岁并且居住在“Ahmedabad”的客户涨工资。
UPDATE customersSET salary = salary * 1.10 -- 涨薪 10%WHERE age > 30 AND city = 'Ahmedabad';带有 OR 的 DELETE
Section titled “带有 OR 的 DELETE”删除年龄小于 23 岁或薪水小于 1600 的客户记录。
DELETE FROM customersWHERE age < 23 OR salary < 1600;**安全提示:** 在运行 `UPDATE` 或 `DELETE` 之前,始终使用相同的 `WHERE` 子句运行 `SELECT *` 来确认你正在操作正确的行。最佳实践与性能
Section titled “最佳实践与性能”- 使用括号: 在混合使用
AND和OR时,始终使用括号以避免歧义。 - 对
OR条件使用IN: 对于同一列上的多个OR条件,IN运算符更简洁,通常性能更好。WHERE city = 'Kota' OR city = 'Delhi'可以改写为WHERE city IN ('Kota', 'Delhi')。 - 索引:
WHERE子句中的条件可以从数据库索引中受益匪浅。对两个索引列使用AND通常非常快。两个不同列之间的OR可能会慢得多,因为数据库可能无法有效利用索引。