📜  MySQL EXISTS运算符(1)

📅  最后修改于: 2023-12-03 15:03:04.692000             🧑  作者: Mango

MySQL EXISTS 运算符

MySQL EXISTS 运算符用于在子查询中测试是否存在任何行。如果子查询返回至少一个行,则 EXISTS 条件就成立。

语法
SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name(s) FROM table_name WHERE condition);
示例

我们假设有两个表:

Orders

| OrderID | CustomerID | OrderDate | |--------|------------|-----------| | 1 | 123 | 2020-01-01| | 2 | 456 | 2020-01-02| | 3 | 789 | 2020-01-03| | 4 | 123 | 2020-01-04| | 5 | 456 | 2020-01-05|

Customers

| CustomerID | CustomerName | ContactName | Country | |------------|--------------|--------------|----------| | 123 | Alphabet Inc. | John Smith | USA | | 456 | Amazone Inc. | Jane Doe | USA | | 789 | Microsoft Inc.| Bob Johnson | USA |

示例 1:使用子查询

此示例使用子查询来查找具有 CustomerID 等于 123 的任何订单:

SELECT OrderID
FROM Orders
WHERE EXISTS
(SELECT * FROM Customers WHERE Customers.CustomerID = Orders.CustomerID AND CustomerID = 123);
  • SELECT * FROM Customers WHERE Customers.CustomerID = Orders.CustomerID AND CustomerID = 123 返回查询结果:

| CustomerID | CustomerName | ContactName | Country | |------------|--------------|--------------|----------| | 123 | Alphabet Inc. | John Smith | USA |

  • SELECT OrderID FROM Orders WHERE EXISTS (SELECT * FROM Customers WHERE Customers.CustomerID = Orders.CustomerID AND CustomerID = 123) 返回查询结果:

| OrderID | |---------| | 1 | | 4 |

此查询在 Orders 表中查找具有 CustomerID 等于 123 的任何 OrderID。如果子查询返回结果,则 EXISTS 子句就成立,然后将返回匹配子查询条件的 OrderID

示例 2:不使用子查询

与使用子查询不同,在此示例中,我们使用 INNER JOIN 操作符来加入 OrdersCustomers 表。 只有一行数据满足我们的查询条件(订单编号为 1),因此查询结果只返回 1 行数据。

SELECT Orders.OrderID
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID
WHERE Customers.CustomerID = 123;
  • SELECT Orders.OrderID FROM Orders INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID WHERE Customers.CustomerID = 123 返回查询结果:

| OrderID | |---------| | 1 |

在此示例中,我们可以看到 INNER JOIN 操作符通过等于语句来加入两个表。

总结

MySQL EXISTS 运算符用于在子查询中测试是否存在任何行。如果子查询返回至少一个行,则 EXISTS 条件就成立。 可以使用子查询或 JOIN 操作符来与其他表一起使用此运算符。