檢查某行是否存在於 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
子句而出現)。