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;
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;
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.
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
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
"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
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