2016-08-05 66 views
0

有如下表Employee在一张桌子上操作时需要内部连接吗?

enter image description here

我需要找出谁比他们的经理赚取更多的员工和我想出两个方法:

  1. SELECT a.Name AS Employee FROM Employee a, Employee b WHERE a.Salary > b.Salary AND a.ManagerId = b.Id;
  2. SELECT a.Name AS Employee FROM Employee a INNER JOIN Employee b ON a.Salary > b.Salary AND a.ManagerId = b.Id;

两者都工作w并且有接近的速度。

他们之间有什么区别?谢谢。

+0

Borh查询是相同的,但第一个使用现在已经过时预ANSI-92连接sintax(我称之为sintax而不是语法,因为本网站上的许多权威认为将连接条件放入WHERE子句中是一种罪过)。 –

+0

但我认为,两者都是正确的,但仅适用于简单的问题,对于大型查询,Join会更好,不仅可以使用过滤器,而且可以以有效方式加入表格,但'Where'仅用于过滤器。 –

+0

他们是一样的。然而,最喜欢的语法是:SELECT staff.Name FROM Employee AS staff INNER JOIN Empolyee AS manager on staff.ManagerId = manager.Id WHERE staff.Salary> manager.Salary – SIDU

回答

1

这些查询是等效的。但是您应该使用join语法而不是from子句中的逗号。 INNER JOIN ON vs WHERE clause

这里的另一种选择可能有更好的表现用exists

select e.Name AS Employee 
from employee e 
where exists (
    select 1 
    from employee e2 
    where e.managerid = e2.id and e.salary > e2.salary 
) 
相关问题