gpt4 book ai didi

mysql - MySQL JOIN 的评估顺序是什么?

转载 作者:IT老高 更新时间:2023-10-28 23:45:04 28 4
gpt4 key购买 nike

我有以下疑问:

SELECT c.*
FROM companies AS c
JOIN users AS u USING(companyid)
JOIN jobs AS j USING(userid)
JOIN useraccounts AS us USING(userid)
WHERE j.jobid = 123;

我有以下问题:

  1. USING 语法是否与 ON 语法同义?
  2. 这些连接是从左到右评估的吗?换句话说,这个查询是否说:x = Companies JOIN users; y = x 加入工作; z = y 加入用户帐户;
  3. 如果问题 2 的答案是肯定的,那么假设公司表有 companyid、userid 和 jobid 列是否安全?
  4. 我不明白 WHERE 子句在引用别名“j”时如何用于选择公司表上的行

任何帮助将不胜感激!

最佳答案

  1. USING (fieldname) 是 ON table1.fieldname = table2.fieldname 的简写方式。

  2. SQL 没有定义执行 JOINS 的“顺序”,因为这不是语言的本质。显然,必须在语句中指定顺序,但可以认为 INNER JOIN 是可交换的:您可以按任何顺序列出它们,并且会得到相同的结果。

    也就是说,在构造一个 SELECT ... JOIN 时,尤其是包含 LEFT JOIN 的那个,我发现将第三个 JOIN 视为将新表连接到第一个 JOIN、第四个 JOIN 的结果是有意义的如加入第二次JOIN的结果,以此类推。

    由于它影响启发式的方式,指定的顺序会影响查询优化器的行为,这种情况很少见。

  3. 没有。查询的组装方式,它要求公司和用户都有一个 companyid,jobs 有一个 userid 和一个 jobid,useraccounts 有一个 userid。但是,只有一个公司用户需要用户 ID 才能使 JOIN 工作。

  4. WHERE 子句使用作业表提供的列过滤整个结果——即所有 JOIN 列。

关于mysql - MySQL JOIN 的评估顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/228424/

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