檢查某行是否存在於 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