【发布时间】:2022-12-04 20:43:42
【问题描述】:
我对子查询主题很陌生。我想了解 SQL 中的 EXISTS 1 是什么意思,因为当我用 * 替换 1 时,它返回相同的结果。
【问题讨论】:
我对子查询主题很陌生。我想了解 SQL 中的 EXISTS 1 是什么意思,因为当我用 * 替换 1 时,它返回相同的结果。
【问题讨论】:
在 SQL 中,子查询中使用 EXISTS 关键字来检查外部查询中是否存在一行。例如,以下查询在子查询中使用 EXISTS 关键字来查找至少有一个订单的所有产品:
SELECT * FROM products
WHERE EXISTS (
SELECT 1 FROM orders
WHERE orders.product_id = products.id
)
在此查询中,子查询 SELECT 1 FROM orders WHERE orders.product_id = products.id 如果外部查询中存在产品订单,则返回 1,如果不存在订单,则返回 NULL。然后 EXISTS 关键字检查子查询的结果是否不为 NULL(即订单是否存在),并在外部查询中返回满足此条件的产品。
在这种情况下,在子查询中使用 SELECT 1 相当于使用 SELECT *,因为 EXISTS 只检查一行是否存在,并不关心行中的实际值。因此,以下查询将产生相同的结果:
SELECT * FROM products
WHERE EXISTS (
SELECT * FROM orders
WHERE orders.product_id = products.id
)
但是,在子查询中使用 SELECT 1 比使用 SELECT * 更有效,因为它只返回单个值而不是行中的所有值,这可以减少需要在数据库服务器和数据库服务器之间传输的数据量。客户端。
【讨论】: