MySQL EXISTS关键字

MySQL EXISTS关键字

MySQL中的存在运算符是一种布尔运算符,它返回 真或假 结果。它与子查询结合使用,检查子查询中的数据是否存在。这意味着如果子查询返回任何记录,该运算符将返回true。否则,它将返回false。真值总是表示为数字值1,假值表示为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 column、SELECT a_constant或子查询中的任何内容开始。它将产生相同的输出,因为MySQL会忽略子查询中的选择列表。

在找到匹配结果后,此操作符立即终止进一步处理。这个特性提高了MySQL的查询性能。

参数解释

以下是EXISTS操作符中使用的参数:

参数名称 描述
col_names 这是包含于指定表中的列名。
tab_name 这是我们将要执行EXISTS操作的表名。
condition 它用于从表中搜索特定值。
subquery 通常这是以SELECT *开头的SELECT语句,但MySQL会在子查询中忽略它。

MySQL EXISTS运算符示例

让我们了解一下在MySQL中EXIST运算符如何工作。这里,我们将首先使用以下语句创建两个表,分别名为 “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;

我们将获得以下输出:

MySQL EXISTS关键字

MySQL SELECT EXISTS示例

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

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

以下是输出的内容:

MySQL EXISTS关键字

再次,如果我们想要获取没有下过订单的客户的姓名,那么可以使用NOT EXISTS运算符:

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

它将给出以下输出:

MySQL EXISTS关键字

MySQL EXISTS With DELETE Statement Example

假设我们想要从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的表记录已成功删除。

MySQL EXISTS关键字

如果我们想要检查表中是否存在一行数据,可以使用以下查询:

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

我们将获得输出1,意味着为真。因此,cust_id=104在表中存在。

MySQL EXISTS关键字

EXISTS和IN操作符之间的区别

主要区别以表格形式给出:

SN IN EXISTS
1 它用于最小化MySQL中的多个OR条件。 它用于检查子查询中数据的存在性。
2 SELECT col_names FROM tab_name WHERE col_name IN (subquery); SELECT col_names FROM tab_name WHERE [NOT] EXISTS (subquery);
3 它比较IN运算符内的所有值。 它一旦找到第一个true的情况就停止进一步执行。
4 它可以用于比较NULL值。 它不能用于比较NULL值。
5 当子查询结果较少时,它执行得更快。 当子查询结果较大时,它执行得更快。
6 它执行父查询和子查询之间的比较。 它不执行父查询和子查询之间的比较。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程