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 | 它指定从表中搜索特定值。 |
subquery | 通常是以 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;
和
mysql> SELECT * FROM orders;
我们将得到以下输出:
三、MySQL SELECT EXISTS 示例
在本例中,我们将使用 EXISTS 运算符来查找至少下了一个订单的客户的姓名和职业:
mysql> SELECT name, occupation FROM customer
WHERE EXISTS (SELECT * FROM Orders
WHERE customer.cust_id = Orders.cust_id);
输出结果为:
同样,如果我们想获取尚未下订单的客户的姓名,请使用 NOT EXISTS 运算符:
mysql> SELECT name, occupation FROM customer
WHERE NOT EXISTS (SELECT * FROM Orders
WHERE customer.cust_id = Orders.cust_id);
输出结果为:
四、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的表记录被删除成功。
如果我们想检查表中是否存在行,请使用以下查询:
mysql> SELECT EXISTS(SELECT * from customer WHERE cust_id=104) AS Result;
我们将得到输出 1 表示为 true。因此,cust_id=104 存在于表中。
五、EXISTS 和 IN 运算符的区别
EXISTS 和 IN 运算符之间的主要区别以表格形式给出:
Exists | In |
---|---|
它用于最小化 MySQL 中的多个 OR 条件。 | 它用于检查子查询中是否存在数据。 |
SELECT col_names FROM tab_name WHERE col_name IN(子查询); |
SELECT col_names |
它比较 IN 运算符中的所有值。 | 一旦发现第一个真正的事件,它就会停止进一步执行。 |
它可用于比较 NULL 值。 | 它不能用于比较 NULL 值。 |
当子查询结果较少时,它执行得更快。 | 当子查询结果很大时,它执行得更快。 |
它执行父查询和子查询或子查询之间的比较。 | 它不执行父查询和子查询或子查询之间的比较。 |
热门文章
优秀文章