SQL 连接顺序:它会影响结果吗?
本文探讨了更改 SQL 查询中的联接顺序是否会影响结果,特别是在组合内联接和外联接时。 我们将忽略此分析的性能影响。
内部连接:
内连接中表的顺序无关紧要。 如果将 SELECT
子句调整为显式列出列(例如,SELECT a.*, b.*, c.*
而不是 SELECT *
),结果将保持不变。
外连接(左、右、全):
外连接的情况有很大不同:
a LEFT JOIN b
不 与 b LEFT JOIN a
相同。<code class="language-sql">a LEFT JOIN b ON b.ab_id = a.ab_id LEFT JOIN c ON c.ac_id = a.ac_id</code>
<code class="language-sql">a LEFT JOIN c ON c.ac_id = a.ac_id LEFT JOIN b ON b.ab_id = a.ab_id</code>
<code class="language-sql">a LEFT JOIN b ON b.ab_id = a.ab_id LEFT JOIN c ON c.ac_id = a.ac_id AND c.bc_id = b.bc_id</code>
连接条件结构:
连接条件的结构至关重要。例如:
<code class="language-sql">a LEFT JOIN b ON b.ab_id = a.ab_id LEFT JOIN c ON c.bc_id = b.bc_id</code>
仅相当于:
<code class="language-sql">a LEFT JOIN (b LEFT JOIN c ON c.bc_id = b.bc_id) ON b.ab_id = a.ab_id</code>
在连接条件仅使用相等检查而不使用 NULL 值比较的情况下。 包含 NULL 比较或诸如 COALESCE()
之类的函数可能会破坏不同顺序查询之间的等效性。
总之,虽然内连接顺序并不重要,但外连接顺序会显着影响结果。 使用外连接时,必须仔细考虑连接条件,特别是有关 NULL 值的条件。
以上是连接顺序是否会影响 SQL 查询结果,尤其是混合内连接和外连接时?的详细内容。更多信息请关注PHP中文网其他相关文章!