语义对比
语义对比
-- 只筛用户:不放大行数
SELECT * FROM users u
WHERE EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.id);
-- 输出订单列:一对多会放大行数
SELECT u.*, o.id AS order_id
FROM users u
JOIN orders o ON o.user_id = u.id;| 半连接 | IN / EXISTS:不放大行数 |
|---|---|
| 普通连接 | JOIN:输出两侧列,按匹配行数展开 |
| 选择 | 需要输出副表列用 JOIN;只做筛选用 EXISTS/IN |