MySQL 查询不在另一张表的数据

MySQL 查询不在另一张表的数据

MySQL 查询不在另一张表的数据

在实际开发中,有时候我们需要查询某张表中存在的数据,但是在另一张表中不存在的数据。这种场景通常需要使用NOT IN或者LEFT JOIN的方式来实现,本文将详细介绍这两种方法的使用。

使用 NOT IN

NOT IN是一个常用的关键字,它可以用来查询不在指定列表中的数据。下面以一个实际的示例来演示如何使用NOT IN来查询不在另一张表中的数据。

假设我们有两张表,一张是users表,另一张是orders表。现在我们需要查询出所有在users表中存在,但在orders表中不存在的用户。我们可以使用以下SQL语句来实现:

SELECT * FROM users
WHERE user_id NOT IN (SELECT user_id FROM orders);

上面的SQL语句中,首先从orders表中查询出所有的user_id,然后将这个结果用作users表的查询条件,即查询在users表中存在,但在orders表中不存在的用户。

使用 LEFT JOIN

除了NOT IN外,我们还可以使用LEFT JOIN来实现同样的功能。一般来说,使用LEFT JOIN的性能会比NOT IN更好,特别是当数据量较大时。下面是同样的示例,使用LEFT JOIN来查询不在另一张表中的数据:

SELECT u.* FROM users u
LEFT JOIN orders o ON u.user_id = o.user_id
WHERE o.user_id IS NULL;

上面的SQL语句中,我们首先使用LEFT JOIN连接users表和orders表,关联条件为user_id相等。然后通过WHERE o.user_id IS NULL来筛选出orders表中不存在的用户。

示例代码及运行结果

创建测试数据

首先我们需要创建users表和orders表,并向其中插入一些数据,用于后续查询:

CREATE TABLE users (
    user_id INT PRIMARY KEY,
    username VARCHAR(50)
);

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    order_date DATE
);

INSERT INTO users VALUES (1, 'Alice');
INSERT INTO users VALUES (2, 'Bob');
INSERT INTO users VALUES (3, 'Carol');

INSERT INTO orders VALUES (1, 1, '2022-01-01');
INSERT INTO orders VALUES (2, 3, '2022-01-02');

使用 NOT IN 查询

接下来,我们使用NOT IN来查询不在orders表中的用户:

SELECT * FROM users
WHERE user_id NOT IN (SELECT user_id FROM orders);

运行结果如下:

user_id | username
--------|---------
2       | Bob

使用 LEFT JOIN 查询

接着,我们使用LEFT JOIN来查询不在orders表中的用户:

SELECT u.* FROM users u
LEFT JOIN orders o ON u.user_id = o.user_id
WHERE o.user_id IS NULL;

运行结果如下:

user_id | username
--------|---------
2       | Bob

总结

在实际开发中,我们经常会遇到需要查询不在另一张表中的数据的情况。在这种情况下,我们可以使用NOT IN或者LEFT JOIN来实现。一般来说,性能较好的方式是使用LEFT JOIN

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程