MySQL中EXISTS的用法

MySQL中EXISTS的用法,mysql,sql,Mysql,Sql,编辑2: 我想问的是:如果我理解正确,EXISTS语句不会从关系中过滤任何元组。既然它不过滤任何元组,那么它的用途是什么呢 编辑: 为了更详细地说明,在第一个示例中,子查询中包含以下内容: cities_stores.store_type = stores.store_type 但据我所知,如果子查询的计算结果为TRUE,那么将返回与存储区不同的所有存储区类型,对吗?如果是,这有什么用处 ,声明[NOT]EXISTS语句的计算结果为TRUE或FALSE。在链接中存在的两个示例中,如果我假设第一

编辑2: 我想问的是:如果我理解正确,EXISTS语句不会从关系中过滤任何元组。既然它不过滤任何元组,那么它的用途是什么呢

编辑: 为了更详细地说明,在第一个示例中,子查询中包含以下内容:

cities_stores.store_type = stores.store_type
但据我所知,如果子查询的计算结果为TRUE,那么将返回与存储区不同的所有存储区类型,对吗?如果是,这有什么用处

,声明[NOT]EXISTS语句的计算结果为TRUE或FALSE。在链接中存在的两个示例中,如果我假设第一个示例的EXISTS语句和第二个示例的NOT EXISTS语句的计算结果为TRUE,那么这些示例应该等价于以下内容:

例1:

SELECT DISTINCT store_type FROM stores
  WHERE TRUE;
例2:

SELECT DISTINCT store_type FROM stores
  WHERE TRUE;

如果是这种情况,那么两个查询都是等价的,前提是它们的[NOT]EXISTS语句的计算结果为TRUE。所以我的问题是,使用[NOT]EXISTS语句如何有用?它们是如何工作的?如果我所说的是错误的,你能指出错误的地方并解释[NOT]EXISTS语句是如何工作的吗?

请在cities\u stores.store\u type=stores.store\u type的子查询中注意此语句。它是内部表与外部表进行检查的地方。在示例中,cities_stores是主查询中的内部表,stores是外部表

编辑2:我想问的是:如果我理解正确,EXISTS语句不会从关系中过滤任何元组。既然它不过滤任何元组,那么它的用途是什么呢


您要查找的筛选器位于子查询中-其中cities\u stores.store\u type=stores.store\u type。并非表“stores”中的每个记录都会从子查询返回true

Exist语句与

select * from mainTable
Where (select count(*) from subTable where related condition) > 0
但除了一个例外,它在第一场比赛后停止


notexist是该语句的自然扩展

您所指的示例使用相关子查询。

这里有一个很好的答案解释了它背后的机制。

根据子查询的示例,其功能是设置与其他表没有链接的所有记录。这是一个有用的不存在的疑问,你在做什么。当EXISTS引用外部SELECT中的列时,它看起来确实有一些魔力。“我宁愿选择一个看起来更干净的加入。”饼干谢谢。事实上,如果你能有时间详细说明答案,我将非常高兴。@Utku我不确定我是否有答案。但是,如果我们假设它是一个普通的标量函数,它会被多次调用,对于外部选择中的每一行调用一次,返回一个布尔值来指示外部行是保留还是删除,那么就更容易与它和解。那么,为了解释逻辑结果,SQL Server在内部对其进行优化,使其行为类似于连接,这一事实应该是微不足道的。谢谢。事实上,我想我不能清楚地说出我想问什么。我想知道的是,据我所知,EXISTS语句不会过滤任何元组。那么它如何以及在哪里有用呢?例如,你是bookings.com,用户向你提供了一个城市和日期范围,你的任务是列出那个时代的酒店,一种方法是从以下酒店中选择:city\u ID=:city\u ID and exist选择*从availability where hotel\u ID=hotel\u FR和日期介于:START\u DATE和:END\u DATE之间的酒店,这将只列出酒店请记住投票选择您认为有用的答案。