Skip to content

MySQL - 不等于运算符

MySQL - 不等号运算符(NOT EQUAL Operator)

Section titled “MySQL - 不等号运算符(NOT EQUAL Operator)”

在 MySQL 中,不等号运算符(NOT EQUAL operator)用于条件逻辑中,通常在 WHERE 或 HAVING 子句内,用于过滤不匹配特定值的行。此运算符有两种可互换的语法。

  • <>:这是 SQL 标准中用于不等式的运算符。
  • !=:这是 MySQL 也支持的一种常见的 C 风格替代方案。

这两个运算符在 MySQL 中功能上是相同的。然而,为了在不同的 SQL 数据库系统之间获得更好的可移植性,通常建议使用 <>。

让我们使用 CUSTOMERS 表作为示例。

CREATE TABLE CUSTOMERS(
ID INT PRIMARY KEY,
NAME VARCHAR(50) NOT NULL,
AGE INT NOT NULL,
CITY VARCHAR(50),
SALARY DECIMAL(18, 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', 24, 'Indore', 10000.00),
(8, 'James', 35, NULL, 12000.00); -- 请注意 NULL 城市

最常见的用法是根据列的值排除行。

此查询选择所有不来自 ‘Mumbai’ 的客户。

SELECT ID, NAME, CITY, SALARY FROM CUSTOMERS WHERE CITY <> 'Mumbai';
ID姓名城市薪资
1RameshAhmedabad2000.00
2KhilanDelhi1500.00
3KaushikKota2000.00
5HardikBhopal8500.00
6KomalHyderabad4500.00
7MuffyIndore10000.00

需要理解的一个关键行为是,NULL 代表未知或缺失值。因此,使用标准运算符(=、&lt;&gt;、!=)与 NULL 进行任何比较都会被评估为 UNKNOWN(在 WHERE 子句中被视为假)。这意味着上面的查询没有包含城市为 NULL 的客户 James。

要在过滤时正确包含包含 NULL 值的行,您必须使用 IS NULL 明确检查它们。

-- 正确的选择非孟买客户(包括未列出城市)的方法
SELECT ID, NAME, CITY, SALARY
FROM CUSTOMERS
WHERE CITY <> 'Mumbai' OR CITY IS NULL;

您可以将 NOT EQUAL 运算符与 AND 和 OR 结合使用,以创建更具体的过滤器。

查找所有年龄不为 25 岁且薪资大于 5000 的客户。

SELECT ID, NAME, AGE, SALARY
FROM CUSTOMERS
WHERE AGE != 25 AND SALARY > 5000.00;
ID姓名年龄薪资
5Hardik278500.00
7Muffy2410000.00
8James3512000.00

在客户端程序中使用不等号运算符

Section titled “在客户端程序中使用不等号运算符”

从应用程序执行带有 NOT EQUAL 运算符的查询非常简单。使用预处理语句(prepared statements)对于防止 SQL 注入(SQL injection)至关重要。

Python
NodeJS
Java
PHP
import mysql.connector
config = {
'user': 'your_user',
'password': 'your_password',
'host': '127.0.0.1',
'database': 'your_database'
}
# 查找不在特定城市的客户
city_to_exclude = 'Delhi'
query = "SELECT ID, NAME, CITY FROM CUSTOMERS WHERE CITY <> %s"
try:
with mysql.connector.connect(**config) as connection:
with connection.cursor(dictionary=True) as cursor:
# 对参数使用元组,即使是单个值
cursor.execute(query, (city_to_exclude,))
results = cursor.fetchall()
print(f"Customers not in {city_to_exclude}:")
for row in results:
print(f"- ID: {row['ID']}, Name: {row['NAME']}, City: {row['CITY']}")
except mysql.connector.Error as err:
print(f"Error: {err}")
const mysql = require('mysql2/promise');
const pool = mysql.createPool({
host: '127.0.0.1',
user: 'your_user',
password: 'your_password',
database: 'your_database'
});
const getCustomersByAge = async (ageToExclude) => {
const query = 'SELECT ID, NAME, AGE FROM CUSTOMERS WHERE AGE != ?';
try {
const [rows] = await pool.execute(query, [ageToExclude]);
console.log(`Customers not aged ${ageToExclude}:`);
rows.forEach(row => {
console.log(`- ID: ${row.ID}, Name: ${row.NAME}, Age: ${row.AGE}`);
});
} catch (error) {
console.error('Query failed:', error);
} finally {
await pool.end();
}
};
getCustomersByAge(25);
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.math.BigDecimal;
public class NotEqualOperator {
private static final String DB_URL = "jdbc:mysql://localhost:3306/your_database";
private static final String USER = "your_user";
private static final String PASS = "your_password";
public static void main(String[] args) {
String salaryToExclude = "2000.00";
String query = "SELECT ID, NAME, SALARY FROM CUSTOMERS WHERE SALARY <> ?";
try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
PreparedStatement pstmt = conn.prepareStatement(query)) {
pstmt.setString(1, salaryToExclude);
try (ResultSet rs = pstmt.executeQuery()) {
System.out.printf("Customers with salary not equal to %s:%n", salaryToExclude);
while (rs.next()) {
System.out.printf("- ID: %d, Name: %s, Salary: %.2f%n",
rs.getInt("ID"),
rs.getString("NAME"),
rs.getBigDecimal("SALARY")
);
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
<?php
$host = '127.0.0.1';
$db = 'your_database';
$user = 'your_user';
$pass = 'your_password';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
$nameToExclude = 'Komal';
$query = 'SELECT ID, NAME, CITY FROM CUSTOMERS WHERE NAME != :name';
try {
$pdo = new PDO($dsn, $user, $pass, $options);
$stmt = $pdo->prepare($query);
$stmt->execute(['name' => $nameToExclude]);
$results = $stmt->fetchAll();
echo "Customers whose name is not $nameToExclude:\n";
foreach ($results as $row) {
echo "- ID: {$row['ID']}, Name: {$row['NAME']}, City: {$row['CITY']}\n";
}
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
?>