跳至主要内容

SQL NOT EQUAL(不等于)运算符:新手指南

通过我们的专家指南掌握 SQL NOT EQUAL。借助实用示例与优化技巧,学习如何优化数据查询以获得更好的分析效果。
· 6分钟 阅读

使用 AI 探索

在 SQL 领域,掌握比较运算符对于数据处理与分析至关重要。在这些运算符中,NOT EQUAL(<> 或 !=)在筛选不符合特定条件的数据时发挥关键作用。本文教程旨在拆解 NOT EQUAL 运算符,引导初学者理解其重要性、用法和细微差异,从而更高效地编写 SQL 查询。

比较运算符简介

比较运算符是 SQL 的基础,可用于根据特定条件评估数据。常见的包括等于(=)、不等于(<>、!=)、大于(>)、小于(<)等。需要注意的是,SQL 提供了两种表示不等的符号:<> 和 !=。二者功能相同,但为符合 ISO 标准,通常优先使用 <>。

深入了解 SQL NOT EQUAL 运算符

为何使用 NOT EQUAL?

NOT EQUAL 运算符(<> 或 !=)用于查询表中不满足某一条件的数据。它能将特定行从结果中排除,使数据分析更精确、更契合需求。

语法与用法

使用 NOT EQUAL 运算符的语法十分直观,即比较两个表达式以过滤不匹配的数据。它可与多种子句和条件配合使用,例如 WHERE、JOIN 和 HAVING。

WHERE 子句

可用于筛选某列的值不等于指定值的行。例如,要在数据库中选择排除某个产品 ID 的产品,可使用以下代码:

SELECT * 
FROM products 
WHERE ProductID <> 1;

JOIN 条件

可在 ON 子句中用于定义表连接条件。

SELECT e1.name, e2.name
FROM employees e1
JOIN employees e2
ON e1.manager_id != e2.employee_id;

HAVING 子句

可用于基于聚合条件筛选分组数据。

SELECT department_id, COUNT(*)
FROM employees
GROUP BY department_id
HAVING COUNT(*) != 5;

CASE 表达式

可用于条件逻辑,在条件满足时返回特定结果。

SELECT name, 
       CASE 
           WHEN department_id != 10 THEN 'Other Department' 
           ELSE 'Department 10'
       END AS department_category
FROM employees;

UPDATE 语句

可在 WHERE 子句中使用,以基于不等条件指定要更新的行。

UPDATE employees
SET salary = salary * 1.1
WHERE job_id != 'Manager';

DELETE 语句

可在 WHERE 子句中使用,以识别条件为真的要删除的行。

DELETE FROM employees
WHERE department_id != 10;

实用示例

下面通过更深入的示例展示 SQL NOT EQUAL 运算符在查询数据库时的多样性与强大功能。这些示例将演示如何在各种场景中有效使用 != 与 <>,以提升您的 SQL 查询能力。

示例 1:筛除特定记录

设想有一张名为 Employees 的数据表,包含 EmployeeID、Name 和 DepartmentID 列。要排除来自某个部门(如 DepartmentID 3)的员工,您可以使用 NOT EQUAL 运算符:

EmployeeID

Name

DepartmentID

1

Alice Johnson

1

2

Bob Smith

2

3

Carol White

3

4

David Green

2

5

Erin Black

4

SELECT EmployeeID, Name, DepartmentID
FROM Employees
WHERE DepartmentID != 3;

此查询将检索所有不属于 DepartmentID 3 的员工,有效地筛除了该部门的人员。

EmployeeID

Name

DepartmentID

1

Alice Johnson

1

2

Bob Smith

2

4

David Green

2

5

Erin Black

4

示例 2:组合条件

现在,假设您想同时排除来自 DepartmentID 3 的员工,以及姓名以“A”开头的员工。需要将 NOT EQUAL 与其他条件(如 AND 与 LIKE)组合使用:

SELECT EmployeeID, Name, DepartmentID
FROM Employees
WHERE DepartmentID <> 3 AND Name NOT LIKE 'A%';

该查询演示了如何将 NOT EQUAL 与 LIKE 的模式匹配结合,基于部门和姓名条件排除一部分员工。

EmployeeID

Name

DepartmentID

2

Bob Smith

2

4

David Green

2

5

Erin Black

4

示例 3:处理 NULL 值

在 SQL 中处理 NULL 需要格外注意,因为 NULL 表示未知。要查找 ManagerID 不为已知(即为 NULL)的员工,您可能会想到用 != 或 <>。但正确做法是使用 IS NOT NULL:

EmployeeID

Name

DepartmentID

ManagerID

1

Alice Johnson

1

NULL

2

Bob Smith

2

1

3

Carol White

3

1

4

David Green

2

2

5

Erin Black

4

3

更新后的 Employees 表

SELECT EmployeeID, Name
FROM Employees
WHERE ManagerID IS NOT NULL;

该查询会获取拥有已知 ManagerID 的员工,排除 ManagerID 为 NULL 的员工。这突显了理解 SQL 在比较操作中如何解释 NULL 的重要性。

EmployeeID

Name

2

Bob Smith

3

Carol White

4

David Green

5

Erin Black

示例 4:结合聚合使用 NOT EQUAL

假设您要分析 Sales 表中的销售数据,但不包含 2020 年的销售。将 GROUP BY 与 NOT EQUAL 结合,可在聚合数据的同时过滤特定年份:

SaleID

SaleDate

Quantity

1

2019-05-01

2

2

2019-08-15

1

3

2020-04-20

3

4

2021-07-22

1

5

2021-11-05

2

6

2022-01-30

4

Sales 表

SELECT YEAR(SaleDate) AS SaleYear, COUNT(*) AS TotalSales
FROM Sales
GROUP BY YEAR(SaleDate)
HAVING YEAR(SaleDate) <> 2020;

该查询按年份聚合销售,并排除 2020 年的总销售额,展示了如何将 NOT EQUAL 与聚合函数及 GROUP BY 结合使用以优化数据分析。

SaleYear

TotalSales

2019

2

2021

2

2022

1

示例 5:性能优化

当查询大型数据集时,NOT EQUAL 条件的写法可能影响性能。假设您使用 Products 表并希望排除类别为 5 和 7 的产品。与其多次使用 NOT EQUAL,可考虑使用 NOT IN 更高效:

ProductID

Name

CategoryID

1

Wireless Mouse

1

2

Gaming Keyboard

5

3

USB-C Charging Cable

3

4

Bluetooth Speakers

7

5

Ergonomic Chair

2

6

LED Monitor

4

7

Smartwatch

5

8

Desk Lamp

6

9

Webcam

2

SELECT ProductID, Name
FROM Products
WHERE CategoryID NOT IN (5, 7);

该查询更为简洁,对大型数据集而言潜在更高效,体现了在排除多个特定值时的优化思路。

ProductID

Name

1

Wireless Mouse

3

USB-C Charging Cable

5

Ergonomic Chair

6

LED Monitor

8

Desk Lamp

9

Webcam

通过这些示例,您可以看到 SQL NOT EQUAL 运算符在多种场景下的灵活与强大,从简单的排除到涉及聚合与性能考量的复杂查询。

在实践这些示例时,请记住 != 与 <> 的选择主要是风格问题,但保持一致能让您的 SQL 查询更易读、更易维护。

性能考量

虽然 NOT EQUAL 运算符功能强大,但使用时应兼顾性能。不等比较有时会导致较低效的执行计划,例如全表扫描。在某些场景下,使用 IN 运算符或等值条件可能带来更好的性能。

结论

NOT EQUAL 运算符是 SQL 中进行数据筛选的基础工具。通过理解其用法并考虑性能影响,实践者可以编写高效而有效的查询。请记住,为符合 ISO 标准,应优先选择 <>,以确保您的 SQL 代码更加健壮并具有广泛可读性。

如需进一步了解 SQL NOT EQUAL 运算符并探索更多 SQL 基础知识,请查看我们的 SQL 基础速查表 和 SQL 基础 技能学习路径。

Abid Ali Awan

作者

Abid Ali Awan

作为一名持证的数据科学家,我热衷于利用前沿技术打造创新的机器学习应用。凭借在语音识别、数据分析与报告、MLOps、对话式人工智能以及自然语言处理方面的扎实背景,我不断打磨构建智能系统的能力,力求带来切实影响。除技术专长外,我也擅长沟通,能够将复杂概念提炼为清晰、简明的表述。因此,我成为数据科学领域备受关注的博主,与不断壮大的数据专业人士社区分享洞见与实践经验。目前,我专注于内容创作与编辑,借助大语言模型打造有力且吸引人的内容,帮助企业与个人更好地发挥数据价值。

SQL NOT IN 常见问答

SQL NOT EQUAL 运算符的作用是什么?

SQL NOT EQUAL 运算符(<> 或 !=)通过排除满足某一特定条件的行来过滤数据。它常用于在查询中检索不符合指定条件的数据。

SQL 中的 <> 与 != 是否等同?

是的,<> 与 != 在 SQL 中的作用相同,均表示不等。然而,由于 <> 符合 ISO 标准,通常更推荐使用,以便查询更具通用可读性。

NOT EQUAL 运算符能处理 NULL 值吗?

不,NOT EQUAL 运算符不能直接处理 NULL。要过滤 NULL,需要使用 IS NOT NULL 条件,因为在 SQL 中 NULL 表示未知值。

在 SQL 查询中使用 NOT EQUAL 的性能如何?

使用 NOT EQUAL 有时会导致较低效的执行计划,例如全表扫描。为优化性能,可在合适场景下考虑使用 IN 运算符或建立索引的等值条件等替代方案。

我可以将 NOT EQUAL 运算符与其他 SQL 条件组合使用吗?

是的,NOT EQUAL 运算符可以与其他条件组合使用,例如逻辑运算符 AND 与 OR,以及 LIKE 等模式匹配函数,从而构建更复杂且更精确的查询。

 

主题