Quelle est la différence entre les jointures séparées par des virgules et la syntaxe jointe dans MySQL?

Par exemple si je devais avoir une table “Person” avec une colonne “id” qui référence une colonne “id” dans la table “Worker”

Quelle serait la différence entre ces deux requêtes? Ils donnent les mêmes résultats.

SELECT * FROM Person JOIN Worker ON Person.id = Worker.id; 

et

 SELECT * FROM Person, Worker WHERE Person.id = Worker.id; 

Merci

Il n’y a pas de différence du tout .

La deuxième représentation rend la requête plus lisible et permet de voir clairement quelle jointure correspond à quelle condition.

Les requêtes sont logiquement équivalentes. L’opérateur virgule est équivalent à un opérateur [INNER] JOIN .

La virgule est l’ancien opérateur de jointure de style. Le mot-clé JOIN a été ajouté plus tard et est favorisé car il permet également des opérations de jointure EXTERNE.

Cela permet également de séparer les prédicats (conditions) de jointure de la clause WHERE en une clause ON . Cela améliore la lisibilité (humaine).

Outre une meilleure lisibilité, il existe encore un cas où les tables explicitement jointes sont meilleures au lieu des tables séparées par des virgules.

Voyons un exemple:

 Create Table table1 ( ID int NOT NULL Identity(1, 1) PRIMARY KEY , Name varchar(50) ) Create Table table2 ( ID int NOT NULL Identity(1, 1) PRIMARY KEY , ID_Table1 INT NOT NULL ) 

La requête suivante me donnera toutes les colonnes et lignes des deux tables

 SELECT * FROM table1, table2 

La requête suivante me donnera des colonnes de la première table avec un alias de table appelé ‘table2’

 SELECT * FROM table1 table2 

Si vous oubliez par erreur une virgule dans une jointure séparée par des virgules, la deuxième table est automatiquement convertie en alias de table pour la première table. Pas dans tous les cas, mais il y a des chances pour quelque chose comme ça

Utiliser JOINS rend le code plus facile à lire, car il est explicite.

En vitesse il n’y a pas de différence (je l’ai testé) et le plan d’exécution est le même

Si l’optimiseur de requêtes fait son travail correctement, il ne devrait y avoir aucune différence entre ces requêtes. Ce ne sont que deux façons de spécifier le même résultat souhaité.

The SELECT * FROM table1, table2, etc. convient à deux tables, mais devient de plus en plus difficile à mesure que le nombre de tables augmente.

La syntaxe JOIN rend explicites les critères qui affectent les tables (donnant une condition). En outre, la deuxième méthode est l’ancienne norme.

Bien que, dans la firebase database, ils finissent par être les mêmes