2013-12-09 19 views
6

qual è la differenza tra l'utilizzo di virgola o join tra due tabelle diverse.la differenza tra virgola e join in sql

come questi due codici:

SELECT studentId, tutorId FROM student, tutor; 


SELECT studentId, tutorId FROM student JOIN tutor; 
+0

"Comma join" come se fossero codice vecchio e non garantito per continuare a essere supportato. È anche meno leggibile e flessibile. Nel complesso, non è raccomandato l'uso. È facile ottenere la clausola WHERE errata e ottenere così più file del previsto. – Tobberoth

+1

Il consorzio SQL Ansi sta cercando di sbarazzarsi di quelle implicite join (virgola) per decenni. Ma ci sono molti sistemi legacy e molti programmatori legacy e questo è improbabile che accada. Vai con i join espliciti, lascia che il codice sia molto più chiaro. – jean

risposta

4

Non c'è nessuna vera differenza quando la loro esecuzione, ma c'è una leggibilità, la coerenza e l'errore problema attenuante al lavoro:

Immagina di avere 4 tavoli Se è stato utilizzato alla vecchia maniera di fare un INNER JOIN, si finirebbe con:

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; 

Utilizzando esplicito inner join sarebbe:

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; 

Quest'ultimo mostra proprio di fronte al tavolo esattamente che cosa sta unendosi con. Ha migliorato la leggibilità e molto meno l'errore incline, dal momento che è più difficile dimenticare di inserire la clausola ON, piuttosto che aggiungere un altro AND in WHERE o aggiungere una condizione errata del tutto (come ho fatto nella query sopra :).

Inoltre, se si stanno facendo altri tipi di join, utilizzando il modo esplicito di scriverli, è sufficiente modificare l'INNER in qualcos'altro, e il codice viene costruito in modo coerente.

2

Sulla base del codice specifico che hai dato, non v'è alcuna differenza a tutti.

Tuttavia, utilizzando la sintassi JOIN operatore, si sono autorizzati a specificare le condizioni join, che è molto importante quando si fa LEFT JOIN s o RIGHT JOIN s

+0

C'è solo una vera differenza, i join vengono valutati prima della clausola condizionale. Ci sono casi molto rari in cui un outter join mal si traduce in risultati diversi. – jean

Problemi correlati