Mysql
 sql >> Database >  >> RDS >> Mysql

Differenza tra questi due approcci alla tabella di unione?

A parte la sintassi, per il piccolo snippet funzionano esattamente allo stesso modo. Ma se possibile, scrivi sempre nuove query utilizzando ANSI-JOIN.

Per quanto riguarda semanticamente, la notazione con virgola viene utilizzata per produrre un prodotto CARTESIANO tra due tabelle, il che significa produrre una matrice di tutti i record della tabella A con tutti i record della tabella B, quindi due tabelle con 4 e 6 record producono rispettivamente 24 record. Usando la clausola WHERE, puoi quindi selezionare le righe che desideri effettivamente da questo prodotto cartesiano. Tuttavia, MySQL in realtà non segue e crea questa enorme matrice, ma semanticamente questo è ciò che significa.

Una sintassi JOIN è lo standard ANSI che definisce più chiaramente come interagiscono le tabelle. Mettendo il ON clausola accanto a JOIN , chiarisce cosa collega tra loro le due tabelle.

Funzionalmente, eseguiranno lo stesso per le tue due query. La differenza si ha quando inizi a usare altri [OUTER] UNISCITI a tipi.

Per MySQL in particolare, la notazione con virgola ha una differenza

STRAIGHT_JOIN è simile a JOIN, tranne per il fatto che la tabella di sinistra viene sempre letta prima della tabella di destra. Può essere utilizzato per quei (pochi) casi in cui l'ottimizzatore di join mette le tabelle nell'ordine sbagliato.

Tuttavia, non sarebbe saggio fare affidamento su questa differenza.