2013-12-09 9 views
6

Jaka jest różnica między używaniem przecinka lub łączeniem dwóch różnych tabel.Różnica między przecinkiem a złączeniem w sql

takie jak te dwa kody:

SELECT studentId, tutorId FROM student, tutor; 


SELECT studentId, tutorId FROM student JOIN tutor; 
+0

"Comma joins" w ten sposób są starym kodem i nie gwarantują, że będą obsługiwane. Jest również mniej czytelny i elastyczny. Ogólnie rzecz biorąc, nie jest to zalecane. Łatwo jest uzyskać niepoprawną klauzulę WHERE iw ten sposób uzyskać znacznie więcej wierszy, niż się spodziewano. – Tobberoth

+1

Konsorcjum SQL Ansi próbuje pozbyć się tych niejawnych połączeń (przecinek) przez dziesięciolecia. Ale istnieje wiele starszych systemów i wielu starszych programistów, co jest mało prawdopodobne. Idź z wyraźnymi złączeniami, to pozwólmy kodowi dużo wyraźniej. – jean

Odpowiedz

4

Nie ma istotnej różnicy przy ich wykonywaniu, ale jest czytelność, konsystencja i błędów łagodzącym problem w pracy:

Wyobraź sobie, że miał 4 stoły Jeśli użyto staroświecki sposób robienia INNER JOIN, by skończyć z:

SELECT col1, col2 
FROM tab1, tab2, tab3,tab4 
WHERE tab1.id=tab2.tab1_id 
AND tab4.id = tab2.tab3_id 
AND tab4.id = tab3.tab4_id; 

Korzystanie wyraźny sprzężenia wewnętrzne byłoby:

SELECT col1, col2 
FROM tab1 
INNER JOIN tab2 ON tab1.id = tab2.tab1_id 
INNER JOIN tab3 ON tab3.id = tab2.tab3_id 
INNER JOIN tab4 ON tab4.id = tab3.tab4_id; 

Ten ostatni pokazuje naprzeciwko stołu dokładnie co to jest łączącymi. Poprawiono czytelność i znacznie mniej błędów, ponieważ trudniej jest zapomnieć o wprowadzeniu klauzuli ON, niż dodać inne AND w WHERE lub dodanie zupełnie złego stanu (tak jak w powyższym zapytaniu :).

Dodatkowo, jeśli robisz inne typy połączeń, używając jawnego sposobu ich pisania, wystarczy zmienić INNER na coś innego, a kod jest konsekwentnie konstruowany.

2

oparciu o konkretny kod dałeś, nie ma żadnej różnicy w ogóle.

Jednakże, używając składni JOIN operatora, masz prawo, aby określić dołączyć warunki, co jest bardzo ważne, gdy robi LEFT JOIN s lub RIGHT JOIN ów

+0

Istnieje tylko jedna prawdziwa różnica, sprzężenia są oceniane przed klauzulą ​​warunkową. Istnieją bardzo rzadkie przypadki, w których zewnętrzny łącznik źle prowadzi do różnicowania wyników. – jean