2013-12-09 11 views
6

Was ist der Unterschied zwischen Komma oder Join zwischen zwei verschiedenen Tabellen verwenden.der Unterschied zwischen Komma und Join in sql

wie diese beiden Codes:

SELECT studentId, tutorId FROM student, tutor; 


SELECT studentId, tutorId FROM student JOIN tutor; 
+0

"Comma Joins" wie diese sind alte Code und nicht garantiert weiterhin unterstützt werden. Es ist auch weniger lesbar und flexibel. Insgesamt wird es nicht empfohlen, zu verwenden. Es ist einfach, die WHERE-Klausel falsch zu bekommen und somit weit mehr Zeilen als erwartet zu erhalten. – Tobberoth

+1

SQL Ansi-Konsortium versucht, diese impliziten Joins (Komma) seit Jahrzehnten loszuwerden. Aber es gibt viele Legacy-Systeme und viele Legacy-Programmierer und das wird wahrscheinlich nicht passieren. Gehen Sie mit den expliziten Joins, es lässt den Code viel klarer. – jean

Antwort

4

Es gibt keinen wirklichen Unterschied, sie bei der Ausführung, aber es gibt eine Lesbarkeit, Konsistenz und Fehler milderndes Problem bei der Arbeit:

Stellen Sie 4 Tische hatten Wenn Sie auf die altmodische Art und Weise zu tun, ein INNER JOIN verwendet wird, werden Sie am Ende würden:

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; 

explizite INNER Joins es wäre:

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; 

Letztere Sie direkt vor dem Tisch zeigt genau das, was es mit beitritt. Es hat die Lesbarkeit verbessert und weniger fehleranfällig, da es schwieriger ist, die ON-Klausel zu vergessen, als ein weiteres AND in WHERE hinzuzufügen oder eine falsche Bedingung hinzuzufügen (wie in der obigen Abfrage :).

Darüber hinaus, wenn Sie andere Arten von JOINS tun, verwenden Sie die explizite Möglichkeit, sie zu schreiben, müssen Sie nur die INNER zu etwas anderem ändern, und der Code ist konsequent konstruiert.

2

auf dem spezifischen Code Basierend Sie gab, gibt es keinen Unterschied zu allen.

jedoch mit der JOIN Operator Syntax, werden Ihnen die Join-Bedingungen angeben, erlaubt, was sehr wichtig ist, wenn LEFT JOIN s oder RIGHT JOIN s tun

+0

Es gibt nur einen wirklichen Unterschied, Joins werden vor der Bedingungsklausel ausgewertet. Es gibt sehr seltene Fälle, in denen ein Außenseiter zu verschiedenen Ergebnissen führt. – jean

Verwandte Themen