Skip to content

sql-not-equal

SQL 不等于运算符是一个比较运算符,用于 WHERE 子句中,以筛选出列值与指定值不匹配的行。对于所有不匹配条件的行,它返回 true。

常用的“不等于”语法有两种:

  • <>: 这是 ISO 标准语法,保证适用于所有主流 SQL 数据库系统。
  • !=: 这种语法被大多数流行数据库(如 PostgreSQL、MySQL、SQL Server、Oracle)广泛支持,但它不是官方 SQL 标准的一部分。

最佳实践:建议使用 <> 运算符,以实现最大的可移植性并遵循 SQL 标准。

SELECT column1, column2, ...
FROM table_name
WHERE column_name <> value;

我们的示例将使用以下 Customers 表。

CREATE TABLE Customers (
ID INT PRIMARY KEY,
Name VARCHAR(100) NOT NULL,
Age INT,
City VARCHAR(100),
Salary DECIMAL(10, 2)
);
INSERT INTO Customers (ID, Name, Age, City, Salary) 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', NULL, 'Indore', 10000.00);

在不同数据类型中使用不等于运算符

Section titled “在不同数据类型中使用不等于运算符”

要检索所有姓名不是 ‘Ramesh’ 的客户:

SELECT ID, Name, City FROM Customers WHERE Name <> 'Ramesh';
ID姓名城市
2KhilanDelhi
3KaushikKota
4ChaitaliMumbai
5HardikBhopal
6KomalHyderabad
7MuffyIndore

要检索所有薪资不是 2000.00 的客户:

SELECT ID, Name, Salary FROM Customers WHERE Salary <> 2000.00;

这将返回除 Ramesh 和 Kaushik 之外的所有客户。

这对初学者来说是一个非常常见的陷阱。在 SQL 中,NULL 表示缺失或未知的值。它不等于任何东西,也不“不等于”任何东西。任何使用 =、<> 或 != 等运算符与 NULL 进行的直接比较都将导致 UNKNOWN(未知)结果,这在 WHERE 子句中被视为 false。

让我们尝试查找所有年龄不等于 25 的客户。请注意,年龄为 NULL 的 Muffy 不在结果集中。

SELECT ID, Name, Age FROM Customers WHERE Age <> 25;

上面的查询被解释为“查找年龄不等于 25 的客户为真的行”。对于 Muffy,她的年龄未知,因此条件不为真。

要处理 NULL 值,您必须使用 IS NULL 或 IS NOT NULL 运算符。如果您想查找所有年龄不等于 25 的客户,包括那些年龄缺失的客户,您必须明确检查 NULL。

SELECT ID, Name, Age FROM Customers WHERE Age <> 25 OR Age IS NULL;

您可以在 WHERE 子句中使用不等于运算符来筛选行,这些行在被 GROUP BY 子句分组之前进行筛选。

让我们计算每个城市的客户数量,排除“Bhopal”市。

SELECT City, COUNT(ID) AS NumberOfCustomers
FROM Customers
WHERE City <> 'Bhopal'
GROUP BY City;
城市客户数量
Ahmedabad1
Delhi1
Hyderabad1
Indore1
Kota1
Mumbai1

NOT EQUAL 运算符可以与 AND 和 OR 结合使用,以创建更复杂的筛选逻辑。

查找所有非“Bhopal”且薪资大于 5000 的客户。

SELECT Name, City, Salary
FROM Customers
WHERE City <> 'Bhopal' AND Salary > 5000;
姓名城市薪资
ChaitaliMumbai6500.00
MuffyIndore10000.00