MySQL 如何在MySQL中找到所有不在集合数组中的记录?

MySQL 如何在MySQL中找到所有不在集合数组中的记录?

在应用程序开发中,经常会遇到需要查询所有不在某个集合数组中的记录的情况。MySQL提供了一种强大的语法,可以轻松地解决这个问题。在本篇文章中,我们将学习如何使用MySQL语法查找所有不在集合数组中的记录。

阅读更多:MySQL 教程

准备工作

在开始之前,我们需要创建一个包含一些数据的表。在本文中,我们将创建一个名为“users”的表,其中包含一个名为“id”的整数列和一个名为“name”的文本列。我们将插入一些数据以供使用。可以使用以下命令来创建表并插入数据:

CREATE TABLE `users` (
  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `users` (`name`) VALUES
  ('Alice'),
  ('Bob'),
  ('Charlie'),
  ('David'),
  ('Eve'),
  ('Frank'),
  ('Grace'),
  ('Helen'),
  ('Ivan'),
  ('Jane');

现在我们已经有一个包含数据的表了,我们可以开始学习如何查找所有不在某个集合数组中的记录。

查找所有不在集合数组中的记录

在MySQL中,我们可以使用NOT IN语法来查找所有不在某个集合数组中的记录。假设我们有一个名为“allowed_names”的数组,其中包含允许访问的用户名,我们可以使用以下语法来查找所有不在“allowed_names”数组中的记录:

SELECT * FROM `users` WHERE `name` NOT IN ('Alice', 'Bob', 'Charlie');

上面的查询将返回“David”、“Eve”、“Frank”、“Grace”、“Helen”、“Ivan”和“Jane”,因为它们的“name”值不在“allowed_names”数组中。

如果我们要查找不在多个数组中的记录,我们可以使用多个NOT IN语句,或者使用NOT INUNION ALL组合的语法。例如,假设我们还有一个名为“forbidden_names”的数组,其中包含不允许访问的用户名,我们可以使用以下语法来查找所有不在“allowed_names”和“forbidden_names”数组中的记录:

SELECT * FROM `users`
WHERE `name` NOT IN ('Alice', 'Bob', 'Charlie')
AND `name` NOT IN ('David', 'Eve', 'Grace')
UNION ALL
SELECT * FROM `users`
WHERE `name` NOT IN ('Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Grace')
AND `name` NOT IN ('Frank', 'Helen', 'Ivan', 'Jane');

上面的查询将返回“Helen”,因为它的“name”值既不在“allowed_names”数组中,也不在“forbidden_names”数组中。

结论

在MySQL中,我们可以使用NOT IN语法来查找所有不在某个集合数组中的记录。如果我们需要查找不在多个数组中的记录,我们可以使用多个NOT IN语句,或者使用NOT INUNION ALL组合的语法。这些语法非常强大,可以轻松地解决这个常见的问题。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程