gpt4 book ai didi

mysql - 当有两个条件时,左连接如何检索数据?

转载 作者:行者123 更新时间:2023-11-29 11:05:45 27 4
gpt4 key购买 nike

如果有如下查询:

SELECT Name, RollID, Score 
FROM StudentTable
LEFT JOIN ScoreTable ON (StudentTable.ID = ScoreTable.StudentID
AND StudentTable.SubjectCode = ScoreTable.CorseCode);
  1. 计算条件“(StudentTable.ID = ScoreTable.StudentID AND St​​udentTable.SubjectCode = ScoreTable.CorseCode)”后是否应用LEFT JOIN

  2. 它会先根据个别条件进行 LEFT JOIN,然后再执行 AND 结果吗?

1和2有什么区别?

最佳答案

一个JOIN (无论其类型)没有(隐式或显式)ON子句将左表中的每一行与右表中的每一行组合起来。

ON子句存在(请参阅下面的更新),仅两个表中与 ON 匹配的行条件组合后进入下一步。

一个LEFT join 确保左表中的所有行都被推送到下一步,无论它们在右表中是否有匹配项。如果左表中的一行与右表中没有匹配项(验证 ON 条件),则一行充满 NULL值用于右表。

ON条件适用于 JOIN步。理论模型首先连接表(对每个 ON 使用 JOIN 条件),然后继续评估 WHERE 。条款等等。

在实践中,出于性能原因,一些数据库引擎(MySQL 就是其中之一)进一步插入了该模型并评估 ON条款与WHERE一起当 ON 时可以评估的条件条款被评估。他们的评价基本都是搬WHERE尽早在处理链中确定条件,以避免浪费资源来处理不会出现在结果集中的行。

您的问题不太清楚,但正确选项是1。ON当表为JOIN时评估条件编辑。

<小时/>

更新:

正如 @onedaywhen 在评论中注意到的那样,原始答案的第一句话对于 NATURAL JOIN 来说并不正确。当 USING使用子句代替 ON .

documentation内容如下:

The NATURAL [LEFT] JOIN of two tables is defined to be semantically equivalent to an INNER JOIN or a LEFT JOIN with a USING clause that names all columns that exist in both tables.

还有:

The USING(column_list) clause names a list of columns that must exist in both tables. If tables a and b both contain columns c1, c2, and c3, the following join compares corresponding columns from the two tables:

a LEFT JOIN b USING (c1,c2,c3)

上面引用中表达的片段(从连接的角度来看)与:

a LEFT JOIN b ON a.c1 = b.c1 AND a.c2 = b.c2 AND a.c3 = b.c3

底线是:有时 ON子句未显式出现在查询中,但仍然存在:NATURAL JOIN包括隐式 USING ; USING是一种特殊的ON 。当这样的隐式或显式ON子句存在,用于过滤掉行,而 JOIN子句已处理,而不是之后处理。

关于mysql - 当有两个条件时,左连接如何检索数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41437406/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com