
- SQL 教程
- SQL - 首頁
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 資料庫
- SQL - 語法
- SQL - 資料型別
- SQL - 運算子
- SQL - 表示式
- SQL 資料庫
- SQL - 建立資料庫
- SQL - 刪除資料庫
- SQL - 選擇資料庫
- SQL - 重新命名資料庫
- SQL - 顯示資料庫
- SQL - 備份資料庫
- SQL 表
- SQL - 建立表
- SQL - 顯示錶
- SQL - 重命名錶
- SQL - 截斷表
- SQL - 克隆表
- SQL - 臨時表
- SQL - 修改表
- SQL - 刪除表
- SQL - 刪除表
- SQL - 約束
- SQL 查詢
- SQL - INSERT 查詢
- SQL - SELECT 查詢
- SQL - SELECT INTO
- SQL - INSERT INTO SELECT
- SQL - UPDATE 查詢
- SQL - DELETE 查詢
- SQL - 排序結果
- SQL 檢視
- SQL - 建立檢視
- SQL - 更新檢視
- SQL - 刪除檢視
- SQL - 重新命名檢視
- SQL 運算子和子句
- SQL - WHERE 子句
- SQL - TOP 子句
- SQL - DISTINCT 子句
- SQL - ORDER BY 子句
- SQL - GROUP BY 子句
- SQL - HAVING 子句
- SQL - AND & OR
- SQL - 布林 (BIT) 運算子
- SQL - LIKE 運算子
- SQL - IN 運算子
- SQL - ANY, ALL 運算子
- SQL - EXISTS 運算子
- SQL - CASE
- SQL - NOT 運算子
- SQL - 不等於
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 運算子
- SQL - UNION 運算子
- SQL - UNION vs UNION ALL
- SQL - INTERSECT 運算子
- SQL - EXCEPT 運算子
- SQL - 別名
- SQL 連線
- SQL - 使用連線
- SQL - INNER JOIN
- SQL - LEFT JOIN
- SQL - RIGHT JOIN
- SQL - CROSS JOIN
- SQL - FULL JOIN
- SQL - 自連線
- SQL - DELETE JOIN
- SQL - UPDATE JOIN
- SQL - LEFT JOIN vs RIGHT JOIN
- SQL - UNION vs JOIN
- SQL 金鑰
- SQL - UNIQUE KEY
- SQL - PRIMARY KEY
- SQL - FOREIGN KEY
- SQL - 組合鍵
- SQL - 候選鍵
- SQL 索引
- SQL - 索引
- SQL - 建立索引
- SQL - 刪除索引
- SQL - 顯示索引
- SQL - UNIQUE 索引
- SQL - 聚簇索引
- SQL - 非聚簇索引
- 高階 SQL
- SQL - 萬用字元
- SQL - 註釋
- SQL - 注入
- SQL - 託管
- SQL - MIN & MAX
- SQL - NULL 函式
- SQL - CHECK 約束
- SQL - DEFAULT 約束
- SQL - 儲存過程
- SQL - NULL 值
- SQL - 事務
- SQL - 子查詢
- SQL - 處理重複項
- SQL - 使用序列
- SQL - 自動遞增
- SQL - 日期 & 時間
- SQL - 遊標
- SQL - 公共表表達式
- SQL - GROUP BY vs ORDER BY
- SQL - IN vs EXISTS
- SQL - 資料庫調優
- SQL 函式參考
- SQL - 日期函式
- SQL - 字串函式
- SQL - 聚合函式
- SQL - 數值函式
- SQL - 文字 & 圖片函式
- SQL - 統計函式
- SQL - 邏輯函式
- SQL - 遊標函式
- SQL - JSON 函式
- SQL - 轉換函式
- SQL - 資料型別函式
- SQL 有用資源
- SQL - 問答
- SQL - 快速指南
- SQL - 有用函式
- SQL - 有用資源
- SQL - 討論
SQL - EXISTS 運算子
SQL EXISTS 運算子
SQL EXISTS 運算子用於驗證特定記錄是否存在於 MySQL 表中。使用此運算子時,需要使用子查詢指定要檢查其存在的記錄。
EXISTS 運算子用於SELECT 語句的WHERE 子句中,根據另一表中相關記錄的存在與否來篩選記錄。
它是一個邏輯運算子。
它返回布林值 TRUE 或 FALSE。
如果子查詢返回至少一條記錄,則返回 TRUE。
如果 EXISTS 運算子返回 TRUE,則外部查詢將執行;否則不執行。
它可以用於 SELECT、UPDATE、DELETE 或 INSERT 語句。
EXISTS 運算子比其他運算子(如 IN)更高效,因為它只需要確定子查詢是否返回任何行,而不需要實際返回資料。
在許多現實場景中,使用 EXISTS 運算子是篩選資料的有效方法,包括根據相關資料的是否存在篩選記錄、根據相關記錄的存在與否聚合資料以及最佳化查詢。
語法
SQL EXISTS 運算子的基本語法如下:
WHERE EXISTS (subquery);
其中,使用的子查詢是 SELECT 語句。如果子查詢在其結果集中返回至少一條記錄,則 EXISTS 運算子將評估為 TRUE;否則為 FALSE。
EXISTS 運算子與 SELECT 語句
SQL 中的 SELECT 語句用於從資料庫中的一個或多個表中檢索資料。我們可以將 EXISTS 運算子與 SELECT 語句一起使用,以檢查滿足特定條件的行是否存在。
示例
為了更好地理解它,讓我們考慮 CUSTOMERS 表,該表包含客戶的個人詳細資訊,包括他們的姓名、年齡、地址和工資等,如下所示:
CREATE TABLE CUSTOMERS ( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
現在,使用 INSERT 語句將值插入此表:
INSERT INTO CUSTOMERS VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ), (2, 'Khilan', 25, 'Delhi', 1500.00 ), (3, 'Kaushik', 23, 'Kota', 2000.00 ), (4, 'Chaitali', 25, 'Mumbai', 6500.00 ), (5, 'Hardik', 27, 'Bhopal', 8500.00 ), (6, 'Komal', 22, 'Hyderabad', 4500.00 ), (7, 'Muffy', 24, 'Indore', 10000.00 );
表將如下建立:
ID | 姓名 | 年齡 | 地址 | 工資 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
讓我們建立另一個表CARS,其中包含客戶 ID、汽車名稱和價格等詳細資訊,使用以下查詢:
create table CARS( ID INT NOT NULL, NAME VARCHAR(20) NOT NULL, PRICE INT NOT NULL, PRIMARY KEY(ID) );
使用 INSERT 語句,讓我們將值插入此表:
insert INTO CARS VALUES (2, 'Maruti Swift', 450000), (4, 'VOLVO', 2250000), (7, 'Toyota', 2400000);
獲得的“CARS”表如下:
ID | 姓名 | 價格 |
---|---|---|
2 | Maruti Swift | 450000 |
4 | VOLVO | 2250000 |
7 | Toyota | 2400000 |
現在,我們正在檢索汽車價格高於 2,000,000 的客戶列表:
SELECT * FROM CUSTOMERS WHERE EXISTS ( SELECT PRICE FROM CARS WHERE CARS.ID = CUSTOMERS.ID AND PRICE > 2000000 );
輸出
產生的結果如下:
ID | 姓名 | 年齡 | 地址 | 工資 |
---|---|---|---|---|
4 | Chaitali | 25 | Mumbai | 6500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
EXISTS 運算子與 UPDATE 語句
我們還可以將 SQL EXISTS 運算子與 UPDATE 語句一起使用。它可以幫助我們根據另一表中匹配行的存在來更新表中的行。
示例
假設我們想更改先前建立的 CUSTOMERS 和 CARS 表中某些客戶的姓名,那麼可以使用 UPDATE 語句來完成此操作。在這裡,我們使用EXISTS 運算子修改所有其 ID 等於 CARS 表 ID 的客戶的姓名“Kushal”,如下所示:
UPDATE CUSTOMERS SET NAME = 'Kushal' WHERE EXISTS ( SELECT NAME FROM CARS WHERE CUSTOMERS.ID = CARS.ID );
輸出
我們得到以下結果。我們可以觀察到已修改了 3 行:
Query OK, 3 rows affected (0.01 sec) Rows matched: 3 Changed: 3 Warnings: 0
驗證
我們可以使用 SELECT 語句檢索其內容來驗證更改是否反映在表中。以下是顯示 CUSTOMERS 表中記錄的查詢:
SELECT * FROM CUSTOMERS;
表顯示如下:
ID | 姓名 | 年齡 | 地址 | 工資 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Kushal | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Kushal | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Kushal | 24 | Indore | 10000.00 |
正如我們在上表中看到的,'Khilan'、'Chaitali' 和 'Muffy' 的 NAME 已更新為 'Kushal'。
EXISTS 運算子與 DELETE 語句
EXISTS 運算子也可以與 DELETE 語句一起使用,以根據子查詢返回的行是否存在來刪除行。
示例
在這裡,我們正在刪除 CUSTOMERS 表中 ID 等於 CARS 表中價格等於“2250000”的 ID 的行:
DELETE FROM CUSTOMERS WHERE EXISTS ( SELECT * FROM CARS WHERE CARS.ID = CUSTOMERS.ID AND CARS.PRICE = 2250000 );
輸出
我們得到以下結果。我們可以觀察到已刪除 1 行:
Query OK, 1 row affected (0.01 sec)
驗證
我們可以使用以下查詢來糾正對 CUSTOMERS 表所做的更改:
SELECT * FROM CUSTOMERS;
表顯示如下:
ID | 姓名 | 年齡 | 地址 | 工資 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
正如我們在上表中看到的,NAME 為“Chaitali”的行已被刪除,因為 CUSTOMERS 表中 Chaitali 的 ID 為“4”,這等於 CARS 表中價格等於“2250000”的 ID。
NOT 運算子與 EXISTS 運算子
在 SQL 中,NOT EXISTS 運算子用於從一個表中選擇在另一個表中不存在的記錄。
語法
以下是 SQL 中 NOT EXISTS 運算子的基本語法:
WHERE NOT EXISTS (subquery);
其中,使用的子查詢是 SELECT 語句。
示例
以下查詢列出了尚未購買任何汽車的客戶姓名:
SELECT * FROM CUSTOMERS WHERE NOT EXISTS ( SELECT * FROM CARS WHERE CUSTOMERS.ID = CARS.ID );
輸出
執行上述查詢後獲得以下輸出:
ID | 姓名 | 年齡 | 地址 | 工資 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
SQL EXISTS 運算子的用法
SQL 中的 EXISTS 運算子廣泛用於現實場景中,以根據另一表中相關資料的是否存在來篩選記錄。一些常見的用例包括:
檢查多對多關係中記錄的存在與否 - EXISTS 運算子可用於檢查多對多關係的聯接表中是否存在記錄,例如,查詢已購買特定產品的所有客戶。
根據相關記錄的存在與否篩選記錄 - EXISTS 運算子可用於根據另一表中相關記錄的存在與否篩選記錄。例如,查詢所有具有關聯訂單詳細資訊的訂單。
根據相關記錄的存在與否聚合資料 - EXISTS 運算子可用於根據相關記錄的存在與否聚合資料。例如,查詢已下訂單的客戶數量。
最佳化查詢 - EXISTS 運算子可用於最佳化查詢,方法是僅返回必要的資料。例如,查詢每個客戶的第一個訂單,而無需使用自連線。
這些只是 EXISTS 運算子如何在現實場景中使用的一些示例。具體的用例將取決於資料和查詢的要求。