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.

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 :
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 » :
Étape 2) Ouvrez la base de données « TutorialsSampleDB.db » à l’aide de la commande suivante :
Vous êtes maintenant prêt à exécuter n’importe quel type de requête sur la base de données.
SQLite JOINTURE 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.
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 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 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 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.
Expliquons plus en détail la requête précédente utilisant la jointure externe gauche à l'aide de diagrammes de Venn :
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.











