我正在努力学习 SQL,并且在理解 EXISTS 语句方面遇到了困难。我偶然发现了这句关于“存在”的话,有些事情我不明白:
使用存在运算符,子查询可以返回零行、一行或多行,条件只是检查子查询是否返回任何行。如果查看子查询的 select 子句,您将看到它由一个文字(1)组成; 因为包含查询中的条件只需要知道返回了多少行,所以子查询返回的实际数据是不相关的。
我不明白的是,外部查询如何知道子查询正在检查哪一行? 例如:
SELECT *
FROM suppliers
WHERE EXISTS (select *
from orders
where suppliers.supplier_id = orders.supplier_id);
我知道,如果来自供应商的 id 与订单表匹配,子查询将返回 true,并且将输出来自供应商表中匹配行的所有列。我不明白的是,如果只返回 true 或 false,子查询如何通信应该打印哪个特定行(比方说具有供应商 id 25的行)。
在我看来,外部查询和子查询之间没有关系。