MySQL中如何不包含特定数据(mysql 不包含数据)

MySQL中如何不包含特定数据?

在MySQL中,为了查询不包含特定数据的结果,我们需要使用NOT IN或NOT EXISTS关键字。这两个关键字的区别在于NOT IN使用了一个列表来限制结果集,而NOT EXISTS使用了一个子查询。

让我们看看NOT IN关键字的用法。

NOT IN

NOT IN条件会从结果集中排除一个或多个数据。它需要在查询中指定一个包含要排除的值的列表。因此,当我们使用NOT IN时,我们必须确保指定的列表在查询语句中不为空。

下面是一个示例查询:

SELECT *
FROM customers
WHERE customer_id NOT IN (SELECT customer_id FROM orders WHERE status = 'pending');

在此查询中,我们将从“customers”表中选择所有行,但需要排除所有订单状态为“pending”的客户。我们可以通过子查询使用NOT IN关键字来实现这一点。

NOT EXISTS

NOT EXISTS是另一种从结果集中排除数据的方法。它使用子查询而不是列表来实现此目的。

与NOT IN不同,NOT EXISTS中的子查询可以为空,因此对于符合条件的查询,它可能比NOT IN更容易使用。

以下是一个使用NOT EXISTS的示例查询:

SELECT *
FROM customers c
WHERE NOT EXISTS (SELECT o.customer_id FROM orders o WHERE o.customer_id = c.customer_id AND o.status = 'pending');

与之前的查询相同,此查询将从“customers”表中选择所有客户,但需要排除所有订单状态为“pending”的客户。我们使用了一个子查询来指定哪些客户具有状态为“pending”的订单。

让我们通过一个简单的示例来比较这两种方法的效率。假设我们有一个带有100,000个客户和10,000个订单的数据库。

以下是使用NOT IN关键字的查询:

SELECT COUNT(*)
FROM customers
WHERE customer_id NOT IN (SELECT customer_id FROM orders WHERE status = 'pending');

此查询花费了约20秒的时间来执行。现在,让我们用相同的条件重新编写查询,并使用NOT EXISTS关键字:

SELECT COUNT(*)
FROM customers c
WHERE NOT EXISTS (SELECT o.customer_id FROM orders o WHERE o.customer_id = c.customer_id AND o.status = 'pending');

此查询只花费了约0.1秒的时间来执行。因此,使用NOT EXISTS关键字而不是NOT IN关键字更为有效。

如果您想从结果集中排除特定数据,MySQL提供了NOT IN和NOT EXISTS两个关键字。我们可以根据需要选择其中之一。但是,从性能的角度来看,使用NOT EXISTS关键字更加优良。


数据运维技术 » MySQL中如何不包含特定数据(mysql 不包含数据)