跳至主要内容

SQL OR 运算符:示例指南

SQL 的 OR 运算符可通过组合多个条件来筛选数据,返回至少满足一个条件的行。了解如何将 OR 与 INSERT、UPDATE 和 DELETE 语句结合使用以修改表中记录。
· 8分钟 阅读

使用 AI 探索

SQL 的 OR 运算符是一种逻辑运算符,用于在查询中基于多个条件筛选数据。OR 运算符通常用于 WHERE 子句,以返回满足给定条件的结果。这使得 OR 运算符成为灵活检索数据的重要工具。

在本教程中,我将通过实用示例展示 OR 运算符在 SQL 查询中的不同用法。如果您正准备成为数据分析师或刚开始学习 SQL,建议学习 DataCamp 的Introduction to SQL课程,学习 SQL 基础。SQL Basics Cheat Sheet 也将帮助您快速查阅查询表、筛选与聚合数据时常用的运算符与函数。

什么是 SQL 的 OR 运算符?

SQL 的 OR 运算符通常与 WHERE 子句一起使用来筛选数据。在查询中使用时,OR 运算符会筛选出至少有一个指定条件为真的行。

下面的查询将返回 employees 表中属于人力资源(HR)部门或薪资超过 $60,000 的所有记录。只要某一行满足任一或两个条件,都会包含在查询结果中。

-- Select rows where the department is either 'HR' OR salary greater than 60,000
SELECT *
FROM employees
WHERE department = 'HR'
OR salary > 60000;

使用 SQL OR 运算符筛选后的示例表格输出

使用 SQL OR 运算符筛选后的示例表格输出。图片由作者提供。

查看 DataCamp 的Intermediate SQL课程,进一步了解 OR 运算符及其他用于条件筛选数据的运算符。

SQL OR 运算符的语法

OR 运算符易于在 SQL 查询中使用和集成。以下是在 SELECT 语句中使用时的基本语法。

SELECT column1, column2, ...
FROM table_name
WHERE condition1
OR condition2
OR condition3;

请注意,您可以在 WHERE 子句中使用多个 OR 条件。

在 SELECT 语句中的基本用法

OR 运算符用于 SELECT 语句,以返回满足任一给定条件的记录。这使得在无需编写多条复杂查询的情况下检索记录变得更为方便。

在下面的示例中,OR 运算符会筛选出所有来自“New York”或“Los Angeles”的员工记录。

-- Select employeees from New York or Los Angeles city
SELECT first_name, last_name, city
FROM employees
WHERE city = 'New York'
OR city = 'Los Angeles';

在 SQL 中将 OR 与 AND 结合使用

OR 运算符可以与 AND 运算符结合使用,以在 SQL 查询中构建更复杂的条件。当同时使用 OR 和 AND 运算符时,需要使用圆括号控制运算顺序。

请看以下查询:我们希望选择 IT 部门且居住在“New York”(作为一个条件组)的所有员工,或者薪资超过 $70,000 的员工。圆括号将 AND 条件分组为单元,在应用 OR 运算符之前先进行求值。

-- Select columns
SELECT first_name, last_name, department, city, salary
FROM employees
 -- Grouping IT department in New York
WHERE (department = 'IT' AND city = 'New York')
-- Employees with salary over 70,000
OR salary > 70000;

通过将 OR 与 AND 运算符组合筛选后的示例输出。

通过将 OR 与 AND 运算符组合筛选后的示例输出。图片由作者提供。

上述查询将评估并返回以下记录:

  • 在 IT 部门工作且居住在纽约的员工。

  • 或任何薪资超过 $70,000 的员工,不论部门或城市。

当将 OR 与 AND 运算符结合使用时,应正确使用圆括号对条件进行分组。否则可能导致逻辑错误并返回非预期结果。

如果查询中未使用圆括号,AND 条件会先于 OR 条件求值。因此,正确使用圆括号可以显式分组条件,确保按预期的求值顺序执行。

SQL OR 运算符的实践示例

OR 运算符可用于不同的 SQL 查询,以检索记录或操作数据库数据。以下是 OR 运算符的一些使用场景示例。

使用多个条件筛选数据

OR 运算符主要用于基于两个或更多条件筛选记录。在需要拓宽数据库检索条件时,这种方法尤为重要。下面的示例将筛选并返回来自纽约市或薪资超过 $80,000 的员工记录。

-- Select columns
SELECT first_name, last_name, department, city, salary
FROM employees
 -- Employees in New York City
WHERE city = 'New York'
-- Employees with salary over 80,000
OR salary > 80000;

在 INSERT 语句中使用 OR 运算符

您可以将 OR 运算符与 INSERT 语句配合使用,在满足指定条件时向表中插入新记录。在下面的示例中,如果员工属于 HR 部门,或者员工薪资超过 $60,000,查询就会向 employees 表插入一条新记录。下面的查询在 SQL Server、MySQL 和 PostgreSQL 数据库中通用。

-- Insert a new record into the 'employees' table
INSERT INTO employees (employee_id, first_name, last_name, department, salary, city)
SELECT 49, 'Anna', 'Johnson', 'HR', 62000, 'New York'
 -- First condition: department is 'HR'
WHERE 'HR' = 'HR' 
 -- Second condition: salary is greater than $60,000
   OR 62000 > 60000;

在 Oracle 数据库中,INSERT 语句有所不同,需要在 FROM 子句中使用 dual 表,这是数据库提供的一个单行单列的特殊表。如果您将特别使用 SQL Server,建议学习我们的Introduction to SQL Server课程。  

-- Insert a new record into the 'employees' table
INSERT INTO employees (employee_id, first_name, last_name, department, salary, city)
SELECT 49, 'Anna', 'Johnson', 'HR', 62000, 'New York'
FROM dual
WHERE 'HR' = 'HR'  -- First condition: department is 'HR'
   OR 62000 > 60000;  -- Second condition: salary is greater than $60,000

在 UPDATE 语句中使用 OR 运算符

UPDATE 语句用于修改表中的现有记录。您可以在 UPDATE 语句中使用 OR 运算符,根据多个条件修改记录,仅更新满足条件的那些行。

在下面的示例中,我们使用 OR 运算符来更新员工薪资:如果员工属于财务(Finance)部门,或居住在芝加哥。

-- Update the salary for the employee
UPDATE employees
-- Increase salary by 10%
SET salary = salary * 1.1  
-- First condition: department is 'Finance'
WHERE department = 'Finance' 
 -- Second condition: employees in Chicago City
OR city = 'Chicago';

在 DELETE 语句中使用 OR 运算符

类似地,SQL 中的 DELETE 语句用于从表中删除现有记录。您可以将 OR 运算符与 DELETE 语句配合使用,根据特定条件从表中删除记录。

下面的查询将删除 employees 表中来自芝加哥或薪资为 $60,000 的员工记录。

-- Delete records from the 'employees' table
DELETE FROM employees
-- First condition: employees from Chicago
WHERE city = 'Chicago'
-- Second condition: employees earning 60000
OR salary = 60000;

SQL OR 查询的性能考量

在处理大型数据集时,使用 OR 运算符可能会遇到性能问题。这可能导致在从大型数据集中筛选记录时操作变慢。以下是常见的性能问题及其缓解方法。

全表扫描

在大型数据集中使用 OR 运算符时,尤其在缺乏适当索引的情况下,可能会触发全表扫描。由于需要逐行评估,这会拖慢查询执行时间。为避免此问题,应对相关列建立索引,使数据库引擎能够更容易、更快速地定位列并进行扫描。

复杂条件求值

当在表中使用 OR 运算符评估多个条件时,若索引不当,查询可能明显变慢。在使用复杂的 OR 条件时,将查询重构为更小的部分(如使用子查询)可能有助于提升性能。

冗余条件

包含不必要的 OR 条件会降低查询性能,因为需要对所有条件进行求值。仅使用必要且更可能为真的 OR 条件,有助于简化并提升查询性能。

OR 运算符的替代方案

当遇到使用 OR 运算符的性能问题时,您可以考虑以下替代方法,在基于多个条件筛选数据时加以应用。

使用 UNION 运算符

UNION 运算符主要用于在需要不同索引的情况下合并两条或多条 SELECT 语句的结果。在下面的查询中,UNION 将操作合并,筛选并返回来自纽约 city 的 IT department 的 employees 记录。如果您尚不熟悉 UNION,请阅读我们的教程UNION vs UNION ALL in SQL。 

-- Use UNION instead of OR for better performance
SELECT first_name, last_name, department, city
FROM employees
-- First condition
WHERE department = 'IT'  
UNION
SELECT first_name, last_name, department, city
FROM employees
-- Second condition
WHERE city = 'New York'; 

使用 CASE 语句

CASE 语句是在查询中加入逻辑条件时替代 OR 运算符的重要方式。CASE 语句可根据其最优执行路径提升查询性能。下面的查询使用 CASE 语句基于多个条件对部门进行分类。

-- Select first name, last name, and a derived category based on conditions
SELECT first_name, last_name,  
-- Use CASE to determine the category based on department or city
CASE  
-- If department is 'IT', categorize as 'Tech' If city is 'New York', categorize as 'NYC'
  WHEN department = 'IT' THEN 'Tech'  
  WHEN city = 'New York' THEN 'NYC'  -- 
  ELSE 'Other'
END AS category
FROM employees; 

查看我们的SQL Fundamentals技能路径,进一步学习用于数据处理的 UNION 运算符与 CASE 语句。

结论

OR 运算符是用于构建灵活、复杂查询的多功能 SQL 运算符。它允许您基于多个条件筛选表记录。正如我们所见,当与 INSERT、UPDATE 和 DELETE 等语句配合使用时,OR 运算符也可用于修改表中的记录。作为数据分析师,了解使用 OR 运算符可能带来的性能问题及其替代方案(如 UNION 运算符与 CASE WHEN 语句)非常重要。 

建议您在不同数据集上练习使用 OR 运算符筛选记录,以更熟悉其功能。要进一步提升 SQL 技能,可考虑我们的Associate Data Analyst in SQL职业路径,成为一名熟练的分析师。Reporting in SQL课程也将帮助您学习如何使用仪表板分析与呈现数据。最后,建议获取 DataCamp 的SQL Associate Certification,以展示您在数据分析所需 SQL 技能方面的能力与水平。

Allan Ouko

作者

Allan Ouko

数据科学技术写作者,具备数据分析、商业智能和数据科学的一线实践经验。我撰写以行业为导向的实用内容,涵盖 SQL、Python、Power BI、Databricks 和数据工程,并以真实的分析工作为基础。我的写作兼顾技术深度与业务影响,帮助专业人士将数据转化为自信的决策。

常见 SQL 问题

SQL 中 OR 与 AND 运算符有什么区别?

当任一指定条件为真时,OR 运算符会返回结果;而只有当所有指定条件都为真时,AND 运算符才会返回结果。

OR 运算符能否与 AND 运算符在同一条查询中使用?

您可以同时使用 OR 与 AND 运算符,基于多个条件筛选记录。但应使用圆括号对条件分组,并明确查询执行顺序。

在 SQL 中使用 OR 运算符筛选条件的数量是否有限制?

使用 OR 运算符筛选条件的数量没有上限,但条件过多可能影响查询性能。

OR 运算符能否用于修改表中的数据?

您可以将 OR 运算符与 INSERT、UPDATE 和 DELETE 语句配合使用,以修改表中指定的记录。

OR 运算符在 SQL 中有哪些替代方案?

UNION 运算符与 CASE WHEN 语句是替代 OR 运算符、用于基于多个条件筛选记录的常见方法。

主题