Mysql 简明教程

MySQL - Exists Operator

MySQL Exists Operator

MySQL 中的 EXISTS 运算符用于检查表中记录是否存在。在 SELECT 语句的 WHERE 子句中使用它来验证子查询是否返回任何行。如果子查询返回至少一条记录,则返回 TRUE,否则返回 FALSE。

我们还可以将运算符与 SQL 语句(如 SELECT, INSERT, UPDATE, and DELETE )配合使用,以验证子查询中记录的存在性。

Syntax

下面是 MySQL 中 EXISTS 运算符的语法 −

SELECT column1, column2, ...
FROM table_name
WHERE EXISTS (subquery);

Example

在执行 EXISTS 运算符之前,让我们先生成两个不同的表,名为 CUSTOMERSCARS 。在此,我们正在创建 CUSTOMERS 表 −

CREATE TABLE CUSTOMERS (
   ID INT AUTO_INCREMENT,
   NAME VARCHAR(20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

以下查询使用 INSERT INTO 语句将 7 条记录添加到上述已创建的表中 −

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'Kaushik', 23, 'Kota', 2000.00 ),
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );

执行以下查询以提取 CUSTOMERS 表中显示的所有记录:

SELECT * FROM CUSTOMERS;

以下为 CUSTOMERS 表 −

让我们创建一个名为 CARS 的另一个表,其中包含 ID、NAME 和车的 PRICE 的详细信息 −

CREATE TABLE CARS (
   ID INT NOT NULL,
   NAME VARCHAR(20) NOT NULL,
   PRICE INT NOT NULL,
   PRIMARY KEY (ID)
);

以下查询将 3 条记录插入到上述已创建的表中 −

INSERT INTO CARS (ID, NAME, PRICE) VALUES
(2, 'Maruti Swift', 450000),
(4, 'VOLVO', 2250000),
(7, 'Toyota', 2400000);

执行以下查询以获取 CARS 表中存在的所有记录 −

SELECT * FROM CARS;

以下是 CARS 表 −

EXISTS operator with SELECT statement

MySQL 中的 SELECT 语句用于从一个或多个表中检索数据。EXISTS 运算符可与 SELECT 语句一起使用,以检查是否存在与特定条件匹配的行。

Example

现在,让我们获取价格高于 2,000,000 的客户列表 −

SELECT * FROM CUSTOMERS
WHERE EXISTS
(SELECT PRICE FROM CARS
WHERE CARS.ID = CUSTOMERS.ID
AND PRICE > 2000000);

Output

执行给定的查询后,输出如下:

EXISTS Operator with UPDATE statement

MySQL EXISTS 运算符可与 UPDATE 语句一起使用,以根据另一个表中匹配行的存在情况,更新表中的行。

Example

在此查询中,我们使用 EXISTS 运算符将匹配 CARS 表中的 ID 的所有客户的名称更新为“Kushal” −

UPDATE CUSTOMERS
SET NAME = 'Kushal'
WHERE EXISTS
(SELECT NAME FROM CARS
WHERE CUSTOMERS.ID = CARS.ID);

Output

正如我们观察到的输出,3 行已被修改 −

Query OK, 3 rows affected (0.01 sec)
Rows matched: 3  Changed: 3  Warnings: 0

Verification

要验证更改是否反映在 CUSTOMERS 表中,请执行以下查询 −

SELECT * FROM CUSTOMERS;

以下是 CUSTOMERS 表的显示方式 −

EXISTS Operator with DELETE statement

MySQL EXISTS 运算符与 DELETE 语句配合使用,根据子查询返回的行是否存在来删除表中的行。

Example

在此,我们删除 CUSTOMERS 表中 ID 等于 CARS 表中 ID 的所有记录,该表的 price 等于 2,250,000 −

DELETE FROM CUSTOMERS
WHERE EXISTS
(SELECT * FROM CARS
WHERE CARS.ID = CUSTOMERS.ID
AND CARS.PRICE = 2250000);

Output

正如我们观察输出所示,已删除 1 行 −

Query OK, 1 row affected (0.00 sec)

Verification

我们可以使用以下查询来验证更改是否已反映在 CUSTOMERS 表中 −

SELECT * FROM CUSTOMERS;

Output

以上查询的输出如下所示:

NOT Operator with EXISTS Operator

如果我们在 MySQL 中使用带有 EXISTS 运算符的 NOT,它将从一个表中选择不存在于另一个表中的记录。

Syntax

以下是 MySQL 中 NOT EXISTS 运算符的语法 −

SELECT column1, column2, ...
FROM table_name
WHERE NOT EXISTS (subquery);

Example

在以下查询中,我们提取尚未购买任何车的客户的 NAME −

SELECT * FROM CUSTOMERS
WHERE NOT EXISTS
(SELECT * FROM CARS
WHERE CUSTOMERS.ID = CARS.ID);

Output

以上查询的输出如下所示:

Exists Operator Using a Client Program

除了使用 MySQL 查询来验证特定记录是否存在于 MySQL 表中之外,您还可以使用客户端程序执行 EXISTS 操作。

Syntax

以下是此操作在各种编程语言中的语法 −

Example

以下是这些程序 −