如何从不存在于MySQL表B中的表A中选择?

如何从不存在于MySQL表B中的表A中选择?

在实际开发中,我们经常需要从两个或多个表中查询数据,并且只需要那些不存在于其中一个表的数据。MySQL提供了一个名为“NOT IN”的子句来执行此操作。但是,在表中有大量数据时,这种方法可能会变得很慢。本文将介绍使用其他方法来查询不存在于MySQL表B中的表A中的数据。

阅读更多:MySQL 教程

方法一:使用LEFT JOIN和IS NULL语句

此方法是使用左连接来确定不存在于B表中的数据。以下为示例代码:

SELECT A.*
FROM A
LEFT JOIN B ON A.id = B.id
WHERE B.id IS NULL;

解释一下,LEFT JOIN返回左表中的所有记录以及右表中匹配的记录。而WHERE语句中B.id IS NULL表示没有与B表中任何记录匹配。接下来,我们来看一个更具体的例子:

假设我们有两个表:

A表:

id name
1 Tom
2 Sam
3 Jack

B表:

id age
1 20
2 22

现在我们需要从A表中查询哪些行不存在于B表中。使用上述代码,我们将获得以下结果:

id name
3 Jack

方法二:使用NOT EXISTS语句

第二种方法是使用“NOT EXISTS”语句来查询不存在于B表中的数据。以下为示例代码:

SELECT *
FROM A
WHERE NOT EXISTS (
    SELECT *
    FROM B
    WHERE A.id = B.id
);

解释一下,NOT EXISTS子句用于检查子查询是否返回任何行。如果子查询不返回行,则WHERE子句为true。接下来,我们使用上述示例中的表来演示此代码段的工作原理。我们将获得以下结果:

id name
3 Jack

方法三:使用NOT IN语句

NOT IN语句是第三种查询不存在于B表中的数据的方法。以下为示例代码:

SELECT *
FROM A
WHERE A.id NOT IN (
    SELECT id
    FROM B
);

解释一下,NOT IN子句将从A表中选择不存在于B表中的数据,其中SELECT id FROM B子查询将从B表中选择所有ID。现在我们使用上述示例中的表来展示这种方法如何工作。我们将获得以下结果:

id name
3 Jack

方法四:使用EXCEPT语句

第四种方法是使用EXCEPT语句。这对于不支持NOT INNOT EXISTS语句的一些数据库系统有用。以下为示例代码:

SELECT id, name FROM A
EXCEPT
SELECT id, name FROM B;

解释一下,EXCEPT语句将从第一个查询结果中返回不在第二个查询结果中的行。在上面的示例中,它将从A表中选择所有行,然后减去B表中的行,从而得到不存在于B表中的行。我们将获得以下结果:

id name
3 Jack

结论

以上是从不存在于MySQL表B中的表A中选择的四种方法。每种方法的工作方式略有不同,但它们都能够准确地从存在于表A中但不存在于表B中的数据进行筛选。如果您在使用其中一种方法时遇到任何问题,请参考其相应的MySQL文档,或查看第三方教程。祝您好运!

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程