检查某行是否存在于 MySQL 表中的不同方法

Mehvish Ashiq 2023年1月30日 2022年5月13日
  1. 检查 MySQL 表中是否存在行的不同方法
  2. 使用 EXISTS 运算符检查 MySQL 表中是否存在行(记录)
  3. 使用 NOT EXISTS 运算符检查 MySQL 表中是否不存在行(记录)
  4. 使用 EXISTS/NOT EXISTS 运算符和 IF() 函数来检查 MySQL 表中是否存在行
检查某行是否存在于 MySQL 表中的不同方法

本文重点介绍了检查 MySQL 表中是否存在行的不同方法。我们将使用 EXISTSNOT EXISTS 运算符。

如果找到一行(一条记录),我们还可以将这两个运算符与 IF() 函数一起使用以获取有意义的消息。

检查 MySQL 表中是否存在行的不同方法

我们可以使用以下方法来检查 MySQL 表中是否存在行。

  1. 使用 EXISTS 运算符检查行是否存在。
  2. 使用 NOT EXISTS 运算符检查行是否不存在。
  3. EXISTS/NOT EXISTS 运算符与 IF() 函数一起使用。

我们应该有一个表格来使用上面提到的所有方法。

为此,我们创建了一个名为 person 的表,其中包含 IDNAME 属性(列)。你还可以使用以下查询创建并使用一些数据填充它。

创建表:

/*
create a table named `person`.
Here, the schema (database)
name is `ms20`
*/

CREATE TABLE `ms20`.`person` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `NAME` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`ID`));

填充表(插入数据):

/*
populate the table with some data. Here,
we are only inserting the names because
ID is auto increment, and we don't need to
insert that.
*/

INSERT INTO ms20.person (NAME) VALUES
('Mehvish'),
('Thomas'),
('John'),
('Daniel');

/*
The following query can be used if we want to insert
a custom ID rather than the auto-incremented one
*/

INSERT INTO ms20.person (ID, NAME) VALUES (6,'Sara');

显示表:

SELECT * FROM ms20.person;

输出:

检查 mysql 表中是否存在行的不同方法 - 人员表

使用 EXISTS 运算符检查 MySQL 表中是否存在行(记录)

示例代码:

SELECT EXISTS (
    SELECT NAME FROM ms20.person
    WHERE ID = 6) as OUTPUT;

输出(如果找到记录):

OUTPUT
1

示例代码:

SELECT EXISTS (
    SELECT NAME FROM ms20.person
    WHERE ID = 7) as OUTPUT;

输出(如果未找到记录):

OUTPUT
0

EXISTS 运算符检查表中是否存在记录(满足指定条件)。它与另一个可能满足也可能不满足的子查询结合使用。

如果子查询找到至少一条记录,则 EXISTS 运算符返回 truetruefalse 分别用 10 表示。

我们可以将 EXISTS 子句与其他 MySQL 命令一起使用,包括 SELECTINSERTUPDATEDELETE。此外,一旦成功找到满足指定条件的行,进一步的处理就会被 EXISTS 子句终止。

这种技术有助于提高查询的性能,特别是当我们在包含数千条记录的表中进行搜索时。

使用 NOT EXISTS 运算符检查 MySQL 表中是否不存在行(记录)

示例代码:

SELECT NOT EXISTS (
    SELECT NAME FROM ms20.person WHERE ID = 7)
    As RESULT;

输出(如果未找到记录):

RESULT
1

示例代码:

SELECT NOT EXISTS (
    SELECT NAME FROM ms20.person WHERE ID = 6)
    As RESULT;

输出(如果找到记录):

RESULT
0

NOT EXISTS 运算符与 EXISTS 运算符相反,如果表不包含具有给定条件的行,则返回 true(用 1 表示)。如果在表中找到记录,则 NOT EXISTS 返回 false,用 0 表示。

我们可以在 MySQL 8.0.19 或更高版本中使用 NOT EXISTS 运算符。它也可以与子查询中的 TABLE 一起使用,例如 SELECT c1 FROM t1 WHERE EXISTS(TABLE t2);

使用 EXISTS/NOT EXISTS 运算符和 IF() 函数来检查 MySQL 表中是否存在行

示例代码(带有 EXISTS 运算符):

SELECT IF ( EXISTS
           ( SELECT NAME FROM ms20.person WHERE ID = 7) ,
           "FOUND", "NOT FOUND");

输出:

NOT FOUND

这种方法比难以记住的布尔值(10)更易于使用。

如果在 person 表中存在 ID 7 的记录,上述查询返回 "FOUND"。否则,我们将得到"NOT FOUND"

在这里,你可能想知道查询的哪个部分将首先执行。在这种情况下,你可以查看以下屏幕截图以了解上面给出的查询的执行顺序。

检查 mysql 表中是否存在行的不同方法 - 执行顺序

类似地,我们可以将 NOT EXISTSIF() 函数一起使用,如下所示,如果在指定的表中找不到记录,我们将得到 YES;否则,

示例代码(使用 NOT EXISTS 运算符):

SELECT IF ( NOT EXISTS
           ( SELECT NAME FROM ms20.person WHERE ID = 7) ,
           "YES", "NO");

输出:

YES

请记住,我们可以在子查询中使用 SELECT columnSELECT someConstantSELECT * 或其他内容。输出将是相同的,因为 MySQL 忽略了 SELECT 列表(由于 SELECT 子句而出现)。

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

相关文章 - MySQL Table