无涯教程-MySQL - Exists 语句

177 阅读2分钟

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;

将获得以下输出:

MySQL Exists

SELECT EXISTS示例

在此示例中,无涯教程将使用EXISTS运算符查找已下达至少一个订单的客户的姓名(name)和职业(occupation):

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

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 Exists

如果要检查表中是否存在行,请使用以下查询:

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

无涯教程将获得表示真实的输出1。因此,表中存在cust_id = 104。

MySQL Exists

参考链接

www.learnfk.com/mysql/mysql…