檢查某行是否存在於 MySQL 表中的不同方法
- 檢查 MySQL 表中是否存在行的不同方法
-
使用
EXISTS運算子檢查 MySQL 表中是否存在行(記錄) -
使用
NOT EXISTS運算子檢查 MySQL 表中是否不存在行(記錄) -
使用
EXISTS/NOT EXISTS運算子和IF()函式來檢查 MySQL 表中是否存在行
本文重點介紹了檢查 MySQL 表中是否存在行的不同方法。我們將使用 EXISTS 和 NOT EXISTS 運算子。
如果找到一行(一條記錄),我們還可以將這兩個運算子與 IF() 函式一起使用以獲取有意義的訊息。
檢查 MySQL 表中是否存在行的不同方法
我們可以使用以下方法來檢查 MySQL 表中是否存在行。
- 使用
EXISTS運算子檢查行是否存在。 - 使用
NOT EXISTS運算子檢查行是否不存在。 - 將
EXISTS/NOT EXISTS運算子與IF()函式一起使用。
我們應該有一個表格來使用上面提到的所有方法。
為此,我們建立了一個名為 person 的表,其中包含 ID 和 NAME 屬性(列)。你還可以使用以下查詢建立並使用一些資料填充它。
建立表:
/*
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;
輸出:

使用 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 運算子返回 true。true 和 false 分別用 1 和 0 表示。
我們可以將 EXISTS 子句與其他 MySQL 命令一起使用,包括 SELECT、INSERT、UPDATE、DELETE。此外,一旦成功找到滿足指定條件的行,進一步的處理就會被 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
這種方法比難以記住的布林值(1 或 0)更易於使用。
如果在 person 表中存在 ID 7 的記錄,上述查詢返回 "FOUND"。否則,我們將得到"NOT FOUND"。
在這裡,你可能想知道查詢的哪個部分將首先執行。在這種情況下,你可以檢視以下螢幕截圖以瞭解上面給出的查詢的執行順序。

類似地,我們可以將 NOT EXISTS 與 IF() 函式一起使用,如下所示,如果在指定的表中找不到記錄,我們將得到 YES;否則,否。
示例程式碼(使用 NOT EXISTS 運算子):
SELECT IF ( NOT EXISTS
( SELECT NAME FROM ms20.person WHERE ID = 7) ,
"YES", "NO");
輸出:
YES
請記住,我們可以在子查詢中使用 SELECT column、SELECT someConstant、SELECT * 或其他內容。輸出將是相同的,因為 MySQL 忽略了 SELECT 列表(由於 SELECT 子句而出現)。
