SQLite Jointure : Naturelle Gauche Extérieure, Intérieure, Croisement avec Tables

⚡ Résumé intelligent

SQLite Les clauses JOIN combinent les lignes de deux tables ou plus à l'aide de INNER JOIN, JOIN USING, NATURAL JOIN, LEFT OUTER JOIN et CROSS JOIN, vous permettant de faire correspondre les enregistrements liés par des colonnes partagées et de lire des données sur une base de données normalisée.

  • 🔗 Clause de jonction : La clause JOIN relie deux ou plusieurs tables ou sous-requêtes sur une colonne partagée, définie par une condition ON ou USING.
  • (I.e. JOINTURE INTERNE: La fonction INNER JOIN ne renvoie que les lignes où la condition de jointure correspond dans les deux tables, en ignorant les lignes non correspondantes.
  • 🧩 UTILISER et NATUREL : JOIN USING nomme une colonne partagée, tandis que NATURAL JOIN fait correspondre automatiquement toutes les colonnes portant le même nom.
  • 🇧🇷 JOINTURE EXTERNE GAUCHE : LEFT OUTER JOIN conserve chaque ligne de la table de gauche et remplit les colonnes non correspondantes de la table de droite avec des valeurs NULL.
  • ✖️ JOINT CROISÉ : CROSS JOIN renvoie le produit cartésien, associant chaque ligne du tableau de gauche à chaque ligne du tableau de droite.
  • 🤖 Assistance IA : Les outils d'IA de conversion de texte en SQL et GitHub Copilot génèrent SQLite Requêtes JOIN à partir d'invites en langage clair.

SQLite Joignez-vous au

SQLite prend en charge différents types de SQL Jointures, comme INNER JOIN, LEFT OUTER JOIN et CROSS JOIN. Chaque type de JOIN est utilisé pour une situation différente comme nous le verrons dans ce tutoriel.

Introduction à la SQLite Clause REJOINDRE

Lorsque vous travaillez sur une base de données comportant plusieurs tables, vous avez souvent besoin d'obtenir des données de ces multiples tables.

Avec la clause JOIN, vous pouvez lier deux ou plusieurs tables ou sous-requêtes en les joignant. Vous pouvez également définir par quelle colonne vous devez lier les tables et par quelles conditions.

Toute clause JOIN doit avoir la syntaxe suivante :

SQLite Syntaxe de la clause JOIN

Chaque clause de jointure contient :

  • Une table ou une sous-requête qui est la table de gauche ; la table ou la sous-requête avant la clause de jointure (à gauche de celle-ci).
  • Opérateur JOIN – spécifiez le type de jointure (soit INNER JOIN, LEFT OUTER JOIN ou CROSS JOIN).
  • Contrainte JOIN – après avoir spécifié les tables ou les sous-requêtes à joindre, vous devez spécifier une contrainte de jointure, qui sera une condition sur laquelle les lignes correspondantes qui correspondent à cette condition seront sélectionnées en fonction du type de jointure.

Notez que, pour tous les éléments suivants SQLite Pour les exemples de tables JOIN, vous devez exécuter sqlite3.exe et ouvrir une connexion à la base de données d'exemple comme suit :

Étape 1) Dans cette étape, ouvrez Poste de travail et accédez au répertoire suivant « C:\sqlite », puis ouvrez « sqlite3.exe » :

Ouvrez sqlite3.exe depuis le répertoire sqlite

Étape 2) Ouvrez la base de données « TutorialsSampleDB.db » à l’aide de la commande suivante :

Ouvrez la base de données TutorialsSampleDB

Vous êtes maintenant prêt à exécuter n’importe quel type de requête sur la base de données.

SQLite JOINTURE INTERNE

SQLite Diagramme de Venn de jonction interne

La jointure interne (INNER JOIN) ne renvoie que les lignes qui correspondent à la condition de jointure et élimine toutes les autres lignes qui ne correspondent pas à cette condition.

Exemple

Dans l'exemple suivant, nous allons joindre les deux tables « Étudiants » et « Départements » avec DepartmentId pour obtenir le nom du département de chaque étudiant, comme suit :

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Explication du code

L'INNER JOIN fonctionne comme suit :

  • Dans la clause Select, vous pouvez sélectionner les colonnes que vous souhaitez sélectionner parmi les deux tables référencées.
  • La clause INNER JOIN est écrite après la première table référencée par la clause « From ».
  • Ensuite, la condition de jointure est spécifiée avec ON.
  • Des alias peuvent être spécifiés pour les tables référencées.
  • Le mot INNER est facultatif, vous pouvez simplement écrire JOIN.

Sortie

La jointure interne (INNER JOIN) extrait les enregistrements des tables « étudiants » et « départements » correspondant à la condition « Students.DepartmentId = Departments.DepartmentId ». Les lignes ne correspondant à aucune correspondance sont ignorées et ne sont pas incluses dans le résultat.

SQLite Exemple de résultat de jointure interne

C’est pourquoi seulement 8 étudiants sur 10 ont été renvoyés par cette requête concernant les départements d’informatique, de mathématiques et de physique. Les étudiants « Jena » et « George » n’ont pas été inclus car leur identifiant de département est nul et ne correspond pas à la colonne « departmentId » de la table « departments ». Voir ci-dessous :

SQLite JOINTURE INTERNE lignes correspondantes

SQLite REJOIGNEZ… EN UTILISANT

L'INNER JOIN peut être écrit en utilisant la clause « USING » pour éviter la redondance, donc au lieu d'écrire « ON Students.DepartmentId = Departments.DepartmentId », vous pouvez simplement écrire « USING(DepartmentID) ».

Vous pouvez utiliser « JOIN .. USING » chaque fois que les colonnes que vous comparerez dans la condition de jointure portent le même nom. Dans de tels cas, il n'est pas nécessaire de les répéter en utilisant la condition on et d'indiquer simplement les noms des colonnes et SQLite détectera cela.

La différence entre INNER JOIN et JOIN… UTILISATION :

Avec « JOIN … USING », vous n’écrivez pas de condition de jointure, vous écrivez simplement la colonne de jointure commune aux deux tables jointes. Au lieu d’écrire « INNER JOIN table2 ON table1.cola = table2.cola », on écrit « table1 JOIN table2 USING(cola) ».

Exemple

Dans l'exemple suivant, nous allons joindre les deux tables « Étudiants » et « Départements » avec DepartmentId pour obtenir le nom du département de chaque étudiant, comme suit :

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
INNER JOIN Departments USING(DepartmentId);

Explication

  • Contrairement à l'exemple précédent, nous n'avons pas écrit « ON Students.DepartmentId = Departments.DepartmentId », mais simplement « USING(DepartmentId) ».
  • SQLite déduit automatiquement la condition de jointure et compare le DepartmentId des deux tables – Étudiants et Départements.
  • Vous pouvez utiliser cette syntaxe chaque fois que les deux colonnes que vous comparez portent le même nom.

Sortie

Cela vous donnera exactement le même résultat que l’exemple précédent :

SQLite JOINDRE EN UTILISANT un exemple de résultat

SQLite JOINT NATUREL

Un NATURAL JOIN est similaire à un JOIN…USING, la différence est qu'il teste automatiquement l'égalité entre les valeurs de chaque colonne qui existe dans les deux tables.

La différence entre INNER JOIN et un NATURAL JOIN :

  • Dans une jointure interne (INNER JOIN), vous devez spécifier une condition de jointure que celle-ci utilisera pour joindre les deux tables. En revanche, dans une jointure naturelle (natural JOIN), vous n'avez pas besoin de spécifier de condition de jointure. Vous indiquez simplement les noms des deux tables, sans aucune condition. La jointure naturelle vérifie alors automatiquement l'égalité des valeurs de chaque colonne présentes dans les deux tables. Elle infère automatiquement la condition de jointure.
  • Dans NATURAL JOIN, toutes les colonnes des deux tables portant le même nom seront comparées les unes aux autres. Par exemple, si nous avons deux tables avec deux noms de colonnes en commun (les deux colonnes existent avec le même nom dans les deux tables), alors la jointure naturelle joindra les deux tables en comparant les valeurs des deux colonnes et pas seulement d'une. colonne.

Exemple

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
Natural JOIN Departments;

Explication

  • Il n'est pas nécessaire de rédiger une condition de jointure avec les noms de colonnes (comme dans INNER JOIN). Il n'est même pas nécessaire de mentionner le nom de la colonne une seule fois (comme dans JOIN USING).
  • La jointure naturelle analysera les deux colonnes des deux tables. Il détectera que la condition doit être composée d’une comparaison DepartmentId des deux tables Students et Departments.

Sortie

La jointure naturelle (NATURAL JOIN) produira exactement le même résultat que les exemples de jointure interne (INNER JOIN) et de jointure (JOIN USING), car dans notre exemple, les trois requêtes sont équivalentes. Cependant, dans certains cas, le résultat de la jointure interne différera de celui de la jointure naturelle. Par exemple, s'il existe plusieurs tables portant le même nom, la jointure naturelle comparera toutes les colonnes entre elles, tandis que la jointure interne ne comparera que les colonnes spécifiées dans la condition de jointure.

SQLite Exemple de résultat de jointure naturelle

SQLite JOINT EXTERIEUR GAUCHE

La norme SQL définit trois types de jointures externes : LEFT, RIGHT et FULL, mais SQLite ne prend en charge que le LEFT OUTER JOIN naturel.

Dans une jointure externe gauche (LEFT OUTER JOIN), toutes les valeurs des colonnes sélectionnées dans la table de gauche seront incluses dans le résultat de la requête ; ainsi, que la valeur corresponde ou non à la condition de jointure, elle sera incluse dans le résultat.

Si la table de gauche contient « n » lignes, les résultats de la requête contiendront également « n » lignes. Cependant, pour les valeurs des colonnes provenant de la table de droite, toute valeur ne correspondant pas à la condition de jointure sera considérée comme nulle.

Ainsi, vous obtiendrez un nombre de lignes équivalent au nombre de lignes dans la jointure de gauche. Ainsi, vous obtiendrez les lignes correspondantes des deux tables (comme les résultats INNER JOIN), ainsi que les lignes non correspondantes de la table de gauche.

Exemple

Dans l'exemple suivant, nous allons essayer le « LEFT JOIN » pour joindre les deux tables « Student » et « Departments » :

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students             -- this is the left table
LEFT JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Explication

  • SQLite La syntaxe LEFT JOIN est la même que INNER JOIN ; vous écrivez le LEFT JOIN entre les deux tables, puis la condition de jointure vient après la clause ON.
  • La première table après la clause from est la table de gauche. Alors que la deuxième table spécifiée après le LEFT JOIN naturel est la bonne table.
  • La clause OUTER est facultative ; LEFT naturel OUTER JOIN est le même que LEFT JOIN.

Sortie

Comme vous pouvez le constater, toutes les lignes de la table « students » sont incluses, soit 10 étudiants au total. Même si les identifiants de département des quatrième et dernier étudiants, Jena et George, n'existent pas dans la table « Departments », ils sont également inclus.

Dans ces cas-là, la valeur departmentName pour Jena et George sera « nulle » car la table departments ne contient pas de departmentName correspondant à leur valeur departmentId.

SQLite Exemple de résultat de LEFT OUTER JOIN

Expliquons plus en détail la requête précédente utilisant la jointure externe gauche à l'aide de diagrammes de Venn :

SQLite Diagramme de Venn de jonction externe gauche

La jointure LEFT JOIN renverra tous les noms des étudiants de la table « students », même si l'identifiant du département d'un étudiant n'existe pas dans la table « departments ». Ainsi, contrairement à la jointure INNER JOIN, la requête ne renverra pas uniquement les lignes correspondantes, mais également les lignes non correspondantes de la table « students ».

Notez que tout nom d'étudiant qui n'a pas de département correspondant aura une valeur « nulle » pour le nom du département, car il n'y a aucune valeur correspondante pour celui-ci, et ces valeurs sont les valeurs dans les lignes qui ne correspondent pas.

SQLite JOINDRE CROISÉ

Un CROSS JOIN donne le produit cartésien pour les colonnes sélectionnées des deux tables jointes, en faisant correspondre toutes les valeurs de la première table avec toutes les valeurs de la deuxième table.

Ainsi, pour chaque valeur du premier tableau, vous obtiendrez « n » correspondances du deuxième tableau, où n est le nombre de lignes du deuxième tableau.

Contrairement à INNER JOIN et LEFT OUTER JOIN, avec CROSS JOIN, vous n'avez pas besoin de spécifier de condition de jointure, car SQLite n'en a pas besoin pour la jointure croisée.

Le SQLite Cela donnera un ensemble de résultats logiques en combinant toutes les valeurs du premier tableau avec toutes les valeurs du deuxième tableau.

Par exemple, si vous sélectionnez une colonne du premier tableau (colA) et une autre colonne du deuxième tableau (colB), alors colA contient deux valeurs (1,2) et colB contient également deux valeurs (3,4).

Ensuite, le résultat du CROSS JOIN sera de quatre lignes :

  • Deux lignes en combinant la première valeur de colA qui est 1 avec les deux valeurs de colB (3,4) qui seront (1,3), (1,4).
  • De même, deux lignes en combinant la deuxième valeur de colA qui est 2 avec les deux valeurs de colB (3,4) qui sont (2,3), (2,4).

Exemple

Dans la requête suivante, nous allons essayer CROSS JOIN entre les tables Students et Departments :

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
CROSS JOIN Departments;

Explication

  • Dans l' SQLite sélectionnez parmi plusieurs tables, nous venons de sélectionner deux colonnes « nom de l'étudiant » dans la table des étudiants et « nom du département » dans la table des départements.
  • Pour la jointure croisée, nous n'avons spécifié aucune condition de jointure, seulement les deux tables combinées avec une jointure croisée au milieu.

Sortie

Comme vous pouvez le voir, le résultat est de 40 lignes ; 10 valeurs du tableau des étudiants comparées aux 4 départements du tableau des départements. Comme suit:

  • Quatre valeurs pour les quatre départements du tableau des départements correspondant au premier élève Michel.
  • Quatre valeurs pour les quatre départements du tableau des départements ont été associées au deuxième étudiant, John.
  • Quatre valeurs pour les quatre départements du tableau des départements ont été associées au troisième étudiant, Jack… et ainsi de suite.

SQLite Exemple de résultat de jointure croisée

FAQ

SQLite La prise en charge des jointures RIGHT JOIN et FULL OUTER JOIN a été ajoutée dans la version 3.39.0, sortie en 2022. Sur les versions antérieures, une jointure RIGHT JOIN est simulée par un échange.ping les tables dans une jointure LEFT JOIN, et une jointure FULL OUTER JOIN en combinant deux jointures LEFT JOIN avec UNION.

Une jointure interne consiste à fusionner une table avec elle-même en utilisant des alias, une copie servant de table de gauche et l'autre de table de droite. Cette technique est utile pour comparer les lignes d'une même table, par exemple pour associer des employés à leurs responsables.

Oui. Vous enchaînez plusieurs clauses JOIN dans une seule requête SELECT, chacune avec sa propre condition ON ou USING, par exemple FROM A JOIN B ON … JOIN C ON …. SQLite fusionne les tableaux de gauche à droite en un seul ensemble de résultats combinés.

Écrire JOIN seul est la même chose qu'INNER JOIN dans SQLiteCes deux opérations ne conservent que les lignes qui satisfont la condition ON ou USING ; les lignes non correspondantes sont donc supprimées. Le mot-clé INNER est facultatif, ce qui rend JOIN et INNER JOIN interchangeables.

La création d'un index sur les colonnes utilisées dans la condition de jointure permet SQLite La correspondance des lignes sans analyse complète des tables accélère les jointures sur les grands ensembles de données. L'indexation des colonnes de clés étrangères et l'exécution de la commande ANALYZE pour actualiser les statistiques améliorent encore les performances des requêtes de jointure.

Une jointure interne (INNER JOIN) ne renvoie que les lignes correspondantes dans les deux tables. Une jointure externe gauche (LEFT OUTER JOIN) renvoie toutes les lignes de la table de gauche ainsi que les lignes correspondantes de la table de droite, en remplaçant les colonnes de droite non correspondantes par NULL. Ainsi, une jointure externe gauche ne supprime jamais les lignes de la table de gauche.

Oui. Les assistants IA de conversion de texte en SQL transforment les requêtes en langage naturel en SQLite Les instructions INNER, LEFT, NATURAL et CROSS JOIN sont utilisées. Indiquer les noms des tables, des colonnes et leurs relations améliore la précision ; chaque jointure générée doit être vérifiée et testée avant d’être appliquée à des données réelles.

Copilote GitHub suggère SQLite Les requêtes JOIN en ligne dans les éditeurs comme VS CodeIl prend en charge les jointures internes (INNER JOIN), les jointures externes (LEFT JOIN) et les clauses ON ou USING. Il analyse le schéma et les commentaires environnants afin de réutiliser les noms de tables et de colonnes réels dans ses suggestions.

Résumez cet article avec :