网友的一句总结:EXISTS是判断子查询的可行性,IN是判断是否存在于子查询里。
相关子查询不返回结果,只返回符合子查询搜索条件的指令,符合指令则计入然后最后主查询返回结果。
这个例子是从order_items表中筛选没有被买过的商品。
或者换句话来说,从一组数字中筛选没有出现过的,再从反面理解,就是从一组数字中筛选出出现过的,然后再反向。
那肯定是同一个数据,所以考虑到 子查询,自连接,EXISTS的整体运用。
子查询是用来定位的,而自连接是一一对应的,EXISTS是判断定位出来的一一对应的数字是否具有可行性。
SELECT *
FROM products p
WHERE NOT EXISTS
--注意语法是not exists后面不附加值 区别于大于小于
(SELECT product_id
FROM order_items
WHERE product_id = p.product_id)
--把这个自连接语句想成一一对应查询机制
完毕。