INNER JOIN vs LEFT JOIN, cest-à-dire la question. Aujourdhui, nous allons expliquer brièvement comment ces deux types de jointures sont utilisés et quelle est la différence. Nous reviendrons sur ce sujet plus tard lorsque nous développerons notre modèle et serons en mesure décrire des requêtes beaucoup plus complexes.
Changements dans les données
Avant de comparer INNER JOIN vs JOINT GAUCHE, voyons ce que nous savons actuellement. Jusquà présent, dans cette série, nous avons expliqué les principes de base des bases de données: comment créer une base de données et des tables, comment remplir des tables avec des données et vérifier ce qui y est stocké à laide de requêtes simples. Nous avons même joint deux tables dans larticle précédent. Nous sommes maintenant prêts pour la prochaine étape.
Mais avant dy passer, apportons juste une modification mineure à nos données. Nous allons ajouter 2 lignes dans la table country, en utilisant les commandes INSERT INTO suivantes:
Nous allons maintenant vérifier le contenu des deux tables:
Vous pouvez facilement remarquer que nous avons 2 nouvelles lignes dans le pays du tableau, une pour lEspagne et une pour la Russie. Leurs identifiants sont 6 et 7. Notez également que dans la table des villes, il ny a pas de country_id avec la valeur 6 ou 7. Cela signifie simplement que nous navons pas de ville de Russie ou dEspagne dans notre base de données. Nous utiliserons ce fait plus tard.
INNER JOIN
Discutons de ces deux requêtes:
Le résultat quelles renvoient est présenté sur limage ci-dessous:
Les deux requêtes renvoient exactement le même résultat. Ce nest pas un accident mais le résultat du fait quil sagit de la même requête écrite de deux manières différentes. Les deux méthodes sont correctes, et vous pouvez utiliser nimporte laquelle dentre elles.
Dans la première requête, nous avons répertorié toutes les tables que nous utilisons dans la partie FROM de la requête (FROM pays, ville), puis nous sommes allées avec la jointure condition dans la partie WHERE de la requête (WHERE city.country_id = country.id). Au cas où nous aurions oublié décrire cette condition de jointure, nous aurions le produit cartésien des deux tables.
Dans la deuxième requête, nous navons quune seule table dans la partie FROM de la requête (FROM country) et puis nous avons la deuxième table et la condition JOIN dans la partie JOIN de la requête (INNER JOIN city ON city.country_id = country.id).
Bien que les deux requêtes soient bien écrites, je suggérerais que vous utilisez toujours INNER JOIN au lieu de lister les tables et de les joindre dans la partie WHERE de la requête. Il y a plusieurs raisons à cela:
- La lisibilité est bien meilleure car la table utilisée et la condition JOIN associée sont dans la même ligne. Vous pouvez facilement voir si vous avez omis la condition JOIN ou non
- Si vous souhaitez utiliser dautres JOIN plus tard (GAUCHE ou DROITE), vous ne pouvez pas le faire (facilement) à moins davoir utilisé INNER JOIN auparavant que
Maintenant, commentons ce que les requêtes ont réellement renvoyé:
- Toutes les paires de pays et de villes qui sont liées (via une clé étrangère)
- Nous navons pas 2 pays dans la liste (Espagne et Russie), car ils nont aucune ville associée dans le tableau des villes
LEFT JOIN
Je le répète: « Nous navons pas 2 pays sur la liste (Espagne et Russie) car ils nont aucune ville associée dans le tableau des villes ». Cela savérera crucial lors de la comparaison entre INNER JOIN et LEFT JOIN.
Dans certains cas, nous voulons même avoir ces enregistrements dans nos résultats. Par exemple, vous voulez simplement voir dans le résultat que ces pays nont pas denregistrements associés dans une autre table. Cela pourrait faire partie dun contrôle, ou peut-être simplement compter les cas, etc. Quelle que soit la motivation derrière ce désir, nous devrions être techniquement capables de le faire. Et nous sommes. Dans les bases de données, LEFT JOIN fait exactement cela.
Le résultat de LEFT JOIN sera le même que celui de INNER JOIN + nous aurons des lignes, de la table « gauche », sans paire dans le table « droite ». Nous utiliserons la même requête INNER JOIN et remplacerons simplement le mot INNER par LEFT. Voici le résultat:
Vous pouvez facilement remarquer que nous avons 2 lignes de plus, par rapport au résultat de lINNER REJOINDRE la requête. Ce sont des lignes pour la Russie et lEspagne. Puisquils nont pas tous deux de ville associée, tous les attributs de ville de ces deux lignes ont des valeurs NULL (ne sont pas définis). Cest la plus grande différence lorsque lon compare INNER JOIN et LEFT JOIN.
RIGHT JOIN
Vous entendrez au moins parler de RIGHT JOIN. Il est rarement utilisé car il renvoie le même résultat que LEFT JOIN. Par contre, les requêtes qui utilisent LEFT JOIN sont beaucoup plus faciles à lire car nous listons simplement les tables les unes après les autres.
Ceci est léquivalent de la requête précédente utilisant le RIGHT JOIN:
Vous pouvez remarquer que les valeurs renvoyées sont les mêmes, seulement dans ce cas, les valeurs de la table des villes sont dans les 5 premières colonnes, et country- les valeurs associées viennent après eux.
INNER JOIN vs LEFT JOIN
INNER JOIN vs LEFT JOIN?En fait, ce nest pas du tout la question. Vous utiliserez INNER JOIN lorsque vous souhaitez renvoyer uniquement les enregistrements ayant une paire des deux côtés, et vous utiliserez LEFT JOIN lorsque vous aurez besoin de tous les enregistrements de la table «gauche», peu importe sils ont une paire dans la table «droite» ou non. Si vous avez besoin de tous les enregistrements des deux tables, peu importe si elles ont une paire, vous devrez utiliser CROSS JOIN (ou le simuler à laide de LEFT JOINs et UNION). Plus dinformations à ce sujet dans les prochains articles.
Table des matières
Apprenez SQL: CREATE DATABASE & CREATE TABLE Operations
Apprendre SQL: INSÉRER DANS LA TABLE
Apprendre SQL: Clé primaire
Apprendre SQL: Clé étrangère
Apprenez SQL: instruction SELECT
Apprenez SQL: INNER JOIN vs LEFT JOIN
Apprenez SQL: Scripts SQL
Apprendre SQL: Types de relations
Apprendre SQL: Joindre plusieurs tables
Apprendre SQL: Fonctions dagrégation
Apprendre SQL: Comment écrire une requête SELECT complexe
Apprenez SQL: la base de données INFORMATION_SCHEMA
Apprenez SQL: types de données SQL
Apprendre SQL: Théorie des ensembles
Apprendre SQL: Fonctions définies par lutilisateur
Apprendre SQL: Procédures stockées définies par lutilisateur
Apprendre SQL: Vues SQL
Apprendre SQL: Déclencheurs SQL
Apprendre SQL: Pratiquer les requêtes SQL
Apprendre SQL: exemples de requêtes SQL
Apprendre SQL: créer un rapport manuellement utilisation de requêtes SQL
Apprenez SQL: fonctions de date et dheure SQL Server
Apprenez SQL: créez des rapports SQL Server à laide des fonctions de date et dheure
Apprenez SQL: tableaux croisés dynamiques SQL Server
Apprenez SQL: exportation SQL Server vers Excel
Apprenez SQL: introduction aux boucles SQL Server
Apprenez SQL: curseurs SQL Server
Apprenez SQL: Meilleures pratiques SQL pour la suppression et la mise à jour de données
Apprenez SQL: Conventions de dénomination
Apprendre SQL: travaux liés à SQL
Apprendre SQL: jointures non équi dans SQL Server
Apprendre SQL: SQL Injection
- Auteur
- Messages récents
Ses engagements passés et présents vont de la conception et du codage de bases de données à lenseignement, au conseil et à la rédaction de bases de données. A ne pas oublier aussi, BI, création dalgorithmes, échecs, philatélie, 2 chiens, 2 chats, 1 femme, 1 bébé …
Vous pouvez le trouver sur LinkedIn
Voir tous les articles dEmil Drkusic
- Learn SQL: SQL Injection – 2 novembre 2020
- Learn SQL: Non-Equi Joins in SQL Server – 29 septembre 2020
- Learn SQL: Emplois liés à SQL – 1er septembre 2020