2017-07-16 2 views
0

I SQL-Abfragen und meine Lösung auf eine Frage war praktizierte:SQL Query - INNER JOIN - WO vs UND

SELECT C.* 
FROM customer C 
INNER JOIN salesman S ON C.salesman_id = S.salesman_id 
    AND S.commission > 0.12 
    AND S.city <> C.city; 

Und die Lösung auf diese Frage war:

SELECT C.* 
FROM customer C 
INNER JOIN salesman S ON C.salesman_id = S.salesman_id 
WHERE S.commission > .12 
    AND C.city <> S.city; 

Allerdings gibt ist kein Unterschied zwischen den beiden Ausgaben.

Also wollte ich verstehen, wann sollte ich WHERE Klausel und AND Klausel mit INNER JOIN verwenden?

Gibt es Leistungsunterschiede zwischen den beiden angegebenen Abfragen?

+2

In beiden Abfragen wird kein Leistungsunterschied auftreten. Es ist eine Frage der persönlichen Vorlieben. Ich würde gerne die Join Prädikate in 'ON' Zustand und Filter in' Where' Klausel –

Antwort

2

Zwischen den beiden Abfragen besteht kein Unterschied. Als eine Frage der Konvention, die Bedingungen zwischen den beiden Abfragen werden häufig in der on Klausel setzen:

select C.* 
from customer C inner join 
    salesman S 
    on C.salesman_id = S.salesman_id and S.city <> C.city 
where S.commission > 0.12; 

Funktionell, aber können zusätzliche Bedingungen gehen entweder die on Klausel oder die where Klausel - die Ergebnisse und Leistung soll sei gleich. Hinweis: Dies gilt nicht für einen äußeren Join. In diesem Fall sollten die Bedingungen oft in die on Klausel fallen.

+0

Vielen Dank für Ihre Antwort. –

1

Gordon Linoffs Antwort ist korrekt, aber ich bin ein großer Verfechter der Bedingungen, die mit der Beziehung zu tun, dh. der (Fremd-) Schlüssel, der die Tabellen verbindet, in die "On-Klausel" und der Rest in die Where-Klausel. das gibt eine nette Trennung von Sorgen - besonders wenn du einen zusammengesetzten Schlüssel hast.

Wenn Sie sich an dieses Muster halten und die Änderungen der Tabellenstruktur sich auf die Join-Bedingung auswirken, müssen Sie nur den On-Klausel ändern und sich nicht um den Where-Teil kümmern.