Differenza tra questi due approcci al tavolo di riunione?

Considera che abbiamo due tabelle, Users e Posts . user_id è la chiave esterna nella tabella Posts e è la chiave primaria nella tabella Users .

Qual è la differenza tra queste due query SQL?

 select user.name, post.title from users as user, posts as post where post.user_id = user.user_id; 

vs.

 select user.name, post.title from users as user join posts as post using user_id; 

A parte la syntax, per il piccolo frammento, funzionano esattamente allo stesso modo. Ma se ansible, scrivi sempre nuove query usando ANSI-JOIN.

Per quanto riguarda semanticamente, la notazione virgola viene utilizzata per produrre un prodotto CARTESIAN tra due tabelle, il che significa produrre una matrice di tutti i record dalla 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 scegliere le righe che vuoi realmente da questo prodotto cartesiano. Tuttavia, MySQL in realtà non segue e crea questa enorme matrice, ma semanticamente questo è ciò che significa.

Una syntax JOIN è lo standard ANSI che definisce in modo più chiaro il modo in cui le tabelle interagiscono. Inserendo la clausola ON accanto a JOIN , rende chiaro ciò che collega le due tabelle insieme.

Funzionalmente, eseguiranno lo stesso per le tue due domande. La differenza arriva quando si inizia ad usare altri tipi [OUTER] JOIN.

In particolare per MySQL, la notazione a 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. Questo può essere usato per quei (pochi) casi per i quali lo strumento di ottimizzazione dei join mette le tabelle nell’ordine sbagliato.

Tuttavia, non sarebbe saggio basarsi su questa differenza.

 where post.user_id = user.user_id 

Qui stai facendo una dichiarazione condizionale

 from users as user join posts as post using user_id 

Qui stai unendo due tabelle usando la chiave esterna

Alla fine è lo stesso, ma JOIN è meglio utilizzato per le query più avanzate …

Nella syntax MySQL JOIN , CROSS JOIN , INNER JOIN e JOIN sono tutti uguali. Un elenco di tabelle separate da virgola è un STRAIGHT_JOIN , che è quasi identico a un JOIN tranne che la tabella di sinistra viene sempre letta per prima. Secondo il manuale, questo è utile “per quei (pochi) casi per i quali l’ottimizzatore di join mette le tabelle nell’ordine sbagliato”.