HOWTO · MySQL

在 MySQL 中使用 NOT EXISTS

本教程演示如何使用 MySQL 資料庫中的 NOT EXISTS 條件過濾資料。

本頁內容

本教程旨在瞭解如何在 MySQL 資料庫中使用 NOT EXISTS 子句。

企業和組織必須獲取所有表格以分別瞭解每一個表格。當新的個人或資料分析師加入團隊時,這一點至關重要。

在這種情況下,公司需要同時獲取所有表,以演示每個表的工作情況以及在資料庫中建立每個表的原因。

一旦分析師可以訪問資料,他們就可以使用某些資料過濾技術收集見解。個人可以通過多種方式過濾 MySQL 中的資料。

其中一種技術是使用 NOT EXISTS 子句。

使用不存在條件過濾 MySQL 中的資料

為了更深入地理解這一點,讓我們在現有資料庫中建立幾個表。

然後我們將嘗試瞭解如何使用 NOT EXISTS 條件獲取資料。

但是,在開始之前,我們建立一個虛擬資料集來使用。在這裡,我們建立了一個表 student_details 以及幾行。

-- create the table student_details
CREATE TABLE student_details(
  stu_id int unsigned,
  stu_firstName varchar(255) DEFAULT NULL,
  stu_lastName varchar(255) DEFAULT NULL,
  primary key(stu_id)
);
-- insert rows to the table student_details
INSERT INTO student_details(stu_id,stu_firstName,stu_lastName)
 VALUES(1,"Preet","Sanghavi"),
 (2,"Rich","John"),
 (3,"Veron","Brow"),
 (4,"Geo","Jos"),
 (5,"Hash","Shah"),
 (6,"Sachin","Parker"),
 (7,"David","Miller"),
 (8,"A","SAan"),
 (9,"Santa","Merry"),
 (10,"Universe","Brow"),
 (11,"Jeff","Besos");

如我們所見,我們將 stu_id 設定為表 student_details 的主鍵。它將確保此列中的值不能重複或 NULL

此外,我們將 stu_id 列的資料型別設定為 unsigned。上面的查詢建立了一個表,其中包含學生的名字和姓氏。

要檢視資料中的條目,我們使用以下程式碼。

SELECT * FROM student_details;

上面的程式碼將給出以下輸出。

stu_id	stu_firstName	stu_lastName
1	      Preet	        Sanghavi
2	      Rich	        John
3	      Veron	        Brow
4	      Geo	        Jos
5	      Hash	        Shah
6	      Sachin	    Parker
7	      David	        Miller
8		  A				SAan
9		  Santa			Merry
10		  Universe		Brow
11		  Jeff			Besos

現在,讓我們建立另一個名為 student_details_dummy 的表,以便這個新表是原始表的子集。我們可以使用以下查詢來做到這一點。

-- create the table student_details_dummy
CREATE TABLE student_details_dummy(
  stu_id int,
  stu_firstName varchar(255) DEFAULT NULL,
  stu_lastName varchar(255) DEFAULT NULL,
  primary key(stu_id)
);
-- insert rows to the table student_details_dummy
INSERT INTO student_details_dummy(stu_id,stu_firstName,stu_lastName)
 VALUES(1,"Preet","Sanghavi"),
 (2,"Rich","John"),
 (3,"Veron","Brow"),
 (4,"Geo","Jos"),
 (5,"Hash","Shah"),
 (6,"Sachin","Parker"),
 (7,"David","Miller");

現在,在查詢的幫助下,我們建立了一個名為 student_details_dummy 的新表,並在其中新增了幾行。

重要的是要注意,與有 11 名學生的 student_details 表相比,我們在這個新表 (7) 中的學生數量有限。

我們可以藉助以下查詢視覺化 student_details_dummy 表。

select * from student_details_dummy;

查詢的輸出如下所示。

stu_id	stu_firstName	stu_lastName
1	      Preet	        Sanghavi
2	      Rich	        John
3	      Veron	        Brow
4	      Geo	        Jos
5	      Hash	        Shah
6	      Sachin	    Parker
7	      David	        Miller

由於我們已經建立了表格,讓我們使用不存在條件。特別是,讓我們只獲取 student_details 表中的那些學生的資料,而不是 student_details_dummy 表中的那些學生的資料。

我們可以使用 NOT EXISTS 子句來完成這項工作。

我們可以通過以下語法過濾資料來執行此操作。

SELECT * from table_name
WHERE NOT EXISTS (Another query);

該查詢遍歷我們的整個表並找到與從第二個查詢中獲取的值不匹配的值。我們可以使用下面的查詢來完成我們的表 student_detailsstudent_details_dummy

SELECT stu_id as diff_students from student_details
WHERE NOT EXISTS (SELECT NULL from student_details_dummy where student_details.stu_id = student_details_dummy.stu_id);

在這裡,在查詢中,我們從 student_details 表中獲取 stu_id,這樣這兩個表之間不存在共同的學生。

查詢的輸出如下所示。

diff_students
8
9
10
11

正如我們在查詢中看到的,所有不在 student_details_dummy 表中但出現在 student_details 表中的 stu_id 都顯示在這裡。

我們在 MySQL 中使用帶有 AS 關鍵字的別名 diff_students 來增加程式的可讀性。

因此,在查詢的幫助下,我們可以在 MySQL 中高效、快速地使用 not exists 從一個基於過濾條件的表中獲取所有學生的姓名。