MySQL中的EXISTS运算符是一种布尔运算符,它返回 true或false 结果。它与子查询结合使用,并检查子查询中数据的存在。无涯教程可以将其与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运算符中使用的参数:
| 参数名称 | 说明 |
|---|---|
| col_names | 它是指定表中包含的列的名称。 |
| tab_name | 这是无涯教程要用来执行EXISTS运算符的表的名称。 |
| condition | 它指定从表中搜索特定值。 |
| subquery | 通常以SELECT *开头的SELECT语句,但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;
将获得以下输出:

SELECT EXISTS示例
在此示例中,无涯教程将使用EXISTS运算符查找已下达至少一个订单的客户的姓名(name)和职业(occupation):
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);
它将给出以下输出:

EXISTS与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。因此,表中存在cust_id = 104。