测验:连接
如果我将右表的条件写在 LEFT JOIN 之后的 WHERE 子句中,会发生什么情况?
- 由于缺少对而填充 NULL 的行将在条件中被过滤掉,实际上成为 INNER JOIN。
- 结果与 ON 子句中写入的结果没有什么不同。
- 由于语法错误而无法运行
- 无论条件如何,右表中的所有行都会保留。
如何将 LEFT JOIN 结果中无订单的客户数量设置为 0?
- 使用计数(*)
- 计算连接侧的列数,如 count(o.id)
- 使用 COALESCE(count(*), 0)
- 添加 HAVING count(*) > 0
当一张订单有3个明细时,如果将订单和明细连接起来,然后进行sum(o.total_amount)呢?
- 订单金额膨胀3倍
- 显示准确的订单金额。
- 显示详细金额的总和。
- 发生错误
当使用反连接仅查找未配对的行时,为什么 NOT EXISTS 比 NOT IN 更安全?
- 如果子查询结果中混有NULL,则NOT IN会将整个结果清空。
- 因为 NOT EXISTS 总是更快
- 因为NOT IN不能使用索引。
- 因为只有NOT EXISTS支持关联子查询。
在通过将同一个表与其自身连接来创建对时,为什么要包含条件 a.id < b.id?
- 通过减少比较次数来提高性能
- 尝试排除 id 为 NULL 的行
- 防止同一对出现两次但顺序改变以及与自身配对。
- 尝试确保结果对的排序顺序
如果省略连接条件会发生什么?
- 出现语法错误,根本无法运行。
- 仅返回第一个表中的行
- 所有组合都成为笛卡尔积,行数呈指数增长。
- 主键自动链接在一起。
在执行计划中,嵌套循环的内部节点显示为loops=52310。首先要检查什么?
- 由于内节点的一次性执行时间较短,我们认为没有问题。
- 删除所有索引
- 验证外部行数的估计是否正确。总时间乘以循环可能是瓶颈
- 连接顺序始终是相反的。