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 运算符组合筛选后的示例输出。图片由作者提供。
上述查询将评估并返回以下记录:
-
在 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 技能方面的能力与水平。

数据科学技术写作者,具备数据分析、商业智能和数据科学的一线实践经验。我撰写以行业为导向的实用内容,涵盖 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 运算符、用于基于多个条件筛选记录的常见方法。
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 的所有记录。只要某一行满足任一或两个条件,都会包含在查询结果中。使用 SQL OR 运算符筛选后的示例表格输出。图片由作者提供。
查看 DataCamp 的Intermediate SQL课程,进一步了解
OR运算符及其他用于条件筛选数据的运算符。