gpt4 book ai didi

mysql - 我可以在给定的 SQL 查询中使用 where 子句而不是 AND 吗?如果是,两者有什么区别?

转载 作者:行者123 更新时间:2023-11-29 01:35:50 25 4
gpt4 key购买 nike

在某个地方在线遇到这个查询,解释了带条件的内部连接(激励>3k)。只是想知道我是否可以在下面的 SQL 中使用 where 子句而不是“AND”,如果可以,输出差异是什么在两者中?

SELECT FIRST_NAME,
INCENTIVE_AMOUNT
FROM employee a
INNER JOIN incentives B ON A.EMPLOYEE_ID = B.EMPLOYEE_REF_ID
AND INCENTIVE_AMOUNT > 3000;

最佳答案

他们达成了同样的目标。

但是,通常认为将 join 子句仅用于指定连接并将过滤谓词保留在 where 子句中是一种很好的做法,因此:

select first_name, incentive_amount
from employee e
join incentives i
on i.employee_ref_id = e.employee_id
where i.incentive_amount > 3000

(请注意,innerouter 关键字是可选的,在我看来是多余的困惑,所以我从不使用它们。)

在外连接的情况下(left join,或者如果你绝对必须,left outer join),分离过滤谓词并将它们放在where 子句超出了窗口,因为(例如)如果没有 incentive 行,那么 i.incentive_amount 将为空,因此任何谓词都将排除该行。有人说这就是为什么 ANSI 连接语法是垃圾,连接和过滤谓词之间的区别是人为的和毫无意义的,而其他人则认为这是一种有用的语法的怪癖。

select first_name, incentive_amount
from employee e
left join incentives i
on i.employee_ref_id = e.employee_id
and i.incentive_amount > 3000

您仍然可以在同一查询中遵循内部联接的约定,例如:

select first_name, incentive_amount
from employee e
join departments d
on d.department_id = e.department_id
left join incentives i
on i.employee_ref_id = e.employee_id
and i.incentive_amount > 3000
where d.name = 'Philology'

补充一下,我同意Jonathan Lewis abemployeeincentives 的可怕别名。 (顺便说一句,为什么不使用 employeesincentive?)在我的版本中,我使用了肯定更具可读性的 ei.

关于mysql - 我可以在给定的 SQL 查询中使用 where 子句而不是 AND 吗?如果是,两者有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46361132/

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