2016-08-05 67 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 
) 
相關問題