程序员社区

MySQL系列教程 --- 65、MySQL 中的 Exists语句

MySQL 中的 EXISTS 运算符是一种布尔运算符,它返回true 或 false结果。它与子查询结合使用并检查子查询中数据的存在。这意味着如果子查询返回任何记录,则此运算符返回 true。否则,它将返回false。true 值总是表示数值 1,false 值表示 0。我们可以将它与 SELECT、UPDATE、DELETE、INSERT 语句一起使用。

句法

以下是在MySQL 中使用 EXISTS 运算符的语法:

SELECT col_names  
FROM tab_name  
WHERE [NOT] EXISTS (  
    SELECT col_names   
    FROM tab_name   
    WHERE condition  
);  

NOT 运算符用于否定 EXISTS 运算符。当子查询不返回任何行时,它返回 true。否则,它返回 false。

通常,EXISTS 查询以 SELECT * 开头,但也可以以 SELECT 列、SELECT a_constant 或子查询中的任何内容开头。它将给出相同的输出,因为 MySQL 忽略 SUBQUERY 中的选择列表。

该运算符在找到匹配结果后立即终止以进行进一步处理。此功能提高了 MySQL 中查询的性能。

参数说明

以下是 EXISTS 运算符中使用的参数:

参数名称 说明
col_names 它是包含在指定表中的列的名称。
tab_name 它是我们将要执行 EXISTS 运算符的表的名称。
condition 它指定从表中搜索特定值。
子查询 通常是以 SELECT * 开头的 SELECT 语句,但 MySQL 在子查询中忽略它。

MySQL EXISTS 运算符示例

让我们了解 EXISTS 运算符在 MySQL 中的工作原理。在这里,我们将首先使用以下语句创建两个名为“customer”和“orders”的表:

CREATE TABLE customer(  
  cust_id int NOT NULL,  
  name varchar(35),  
  occupation varchar(25),  
  age int  
);  
CREATE TABLE orders (  
    order_id int NOT NULL,   
    cust_id int,   
    prod_name varchar(45),  
    order_date date  
);  

接下来,我们需要将值插入到两个表中。执行以下语句:

INSERT INTO customer(cust_id, name, occupation, age)   
VALUES (101, 'Peter', 'Engineer', 32),  
(102, 'Joseph', 'Developer', 30),  
(103, 'John', 'Leader', 28),  
(104, 'Stephen', 'Scientist', 45),  
(105, 'Suzi', 'Carpenter', 26),  
(106, 'Bob', 'Actor', 25),  
(107, NULL, NULL, NULL);  
INSERT INTO orders (order_id, cust_id, prod_name, order_date)   
VALUES (1, '101', 'Laptop', '2020-01-10'),  
(2, '103', 'Desktop', '2020-02-12'),  
(3, '106', 'Iphone', '2020-02-15'),  
(4, '104', 'Mobile', '2020-03-05'),  
(5, '102', 'TV', '2020-03-20');  

要验证表,请运行SELECT 命令,如下所示:

msql> SELECT * FROM customer;  
AND,  
mysql> SELECT * FROM orders;  

我们将得到以下输出:

file

MySQL SELECT EXISTS 示例

在本例中,我们将使用 EXISTS 运算符来查找至少下过一个订单的客户的姓名和职业:

mysql> SELECT name, occupation FROM customer  
WHERE EXISTS (SELECT * FROM Orders   
WHERE customer.cust_id = Orders.cust_id);  

出现以下输出:

file

同样,如果我们想获取尚未下订单的客户的姓名,请使用 NOT EXISTS 运算符:

mysql> SELECT name, occupation FROM customer  
WHERE NOT EXISTS (SELECT * FROM Orders   
WHERE customer.cust_id = Orders.cust_id);  

它将给出以下输出:

file

MySQL EXISTS with DELETE 语句示例

假设我们要从 Orders 表中删除一条 order_id = 3 的记录,执行以下查询将永久删除 Orders 表中的记录:

mysql> DELETE FROM Orders WHERE EXISTS (  
SELECT * FROM customer   
WHERE order_id=3);  

要验证输出,请运行以下命令:

mysql> SELECT * FROM Orders;  

在输出中,我们可以看到order_id=3的表记录删除成功。

file

如果我们想检查表中是否存在某行,请使用以下查询:

mysql> SELECT EXISTS(SELECT * from customer WHERE cust_id=104) AS Result;  

我们将得到表示 true 的输出 1。因此,表中存在 cust_id=104。

file

EXISTS 和 IN 运算符的区别

EXISTS 和 IN 运算符之间的主要区别以表格形式给出:

SN IN EXISTS
1. 它用于最小化 MySQL 中的多个 OR 条件。 它用于检查子查询中数据的存在。
2. SELECT col_names FROM tab_name WHERE col_name IN(子查询); 选择列名 从选项卡名称 WHERE [NOT] EXISTS(子查询);
3. 它比较 IN 运算符中的所有值。 一旦找到第一个真正的事件,它就会停止以进一步执行。
4. 它可用于比较 NULL 值。 它不能用于比较 NULL 值。
5. 当子查询结果较少时,它执行得更快。 当子查询结果很大时,它执行得更快。
6. 它执行父查询和子查询或子查询之间的比较。 它不执行父查询和子查询或子查询之间的比较。
赞(0) 打赏
未经允许不得转载:IDEA激活码 » MySQL系列教程 --- 65、MySQL 中的 Exists语句

一个分享Java & Python知识的社区