【发布时间】:2012-10-19 09:44:48
【问题描述】:
select e.last_name, e.hire_date
from employees e join employees m
on (m.last_name = 'Davies')
and (e.hire_date > m.hire_date);
select e.last_name, e.hire_date
from employees e join employees m
on (m.last_name = 'Davies')
where (e.hire_date > m.hire_date);
select e.last_name, e.hire_date
from employees e join employees m
on (e.hire_date > m.hire_date)
where (m.last_name = 'Davies');
这三个语句的结果相同。除了where不能独占使用之外,不使用on,还有什么特别的理由在表连接中使用where?
【问题讨论】:
-
第一:你检查过查询计划吗?
-
对于内部连接,我按照自己的想法布置代码。我把关于将这两种关系联系在一起的东西放在 ON 中。 (好吧,除了它们是包而不是集合之外的关系)并将过滤器放在 where 子句中。在您的示例中,表之间的关系是匹配 M 中的一行与 E 中满足
e.hire_date > m.hiredate的所有行。那将在我的加入。然后从 M 中选择特定行,`m.last_name = 'Davies' 将进入 where 子句。 (你有第三个查询。)