SQLite Joindre : exemple de gauche naturelle extérieure, intérieure, croisée avec des tables

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 forme suivantewing syntaxe:

SQLite Syntaxe de la clause JOIN
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).
  • INSCRIPTION operator – 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 tout le suiviwing SQLite Exemples de tables JOIN, vous devez exécuter le sqlite3.exe et ouvrez une connexion à la base de données exemple en tant que flowing:

Étape 1) Dans cette étape,

  1. Ouvrez Poste de travail et accédez à ce qui suitwing répertoire "C: \sqlite" et
  2. Ouvrez ensuite "sqlite3.exe"

SQLite Clause REJOINDRE

Étape 2) Ouvrez la base de données "TutorielsSampleDB.db» par le suivantwing commander:

SQLite Clause REJOINDRE

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

SQLite JOINTURE INTERNE

INNER JOIN renvoie uniquement les lignes qui correspondent à la condition de jointure et élimine toutes les autres lignes qui ne correspondent pas à la condition de jointure.

SQLite JOINTURE INTERNE
SQLite JOINTURE INTERNE

Exemple

Dans la suitewing exemple, nous joindrons les deux tables »Étudiante" et "Les ministères" avec DepartmentId pour obtenir le nom du département pour 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 suitwing:

  • 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

SQLite Exemple de jointure interne

  • L'INNER JOIN produit les enregistrements des deux - les tables des étudiants et du département qui correspondent à la condition qui est "Sétudiants.DepartmentId = Departments.DepartmentId « . Les lignes sans correspondance seront ignorées et ne seront pas incluses dans le résultat.
  • C'est pourquoi cette requête auprès des départements d'informatique, de mathématiques et de physique n'a renvoyé que 8 étudiants sur 10. Alors que les étudiants « Jena » et « George » n'ont pas été inclus, car ils ont un identifiant de département nul, qui ne correspond pas à la colonne DepartmentId de la table Departments. Comme suitwing:

    SQLite Exemple de jointure interne

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 .. EN UTILISANT :

Avec « JOIN… USING », vous n'écrivez pas de condition de jointure, vous écrivez simplement la colonne de jointure qui est en commun entre les deux tables jointes, au lieu d'écrire table1 « INNER JOIN table2 ON table1.cola = table2.cola » nous écrivons c'est comme "table1 JOIN table2 USING(cola)".

Exemple

Dans la suitewing exemple, nous joindrons les deux tables »Étudiante" et "Les ministères" avec DepartmentId pour obtenir le nom du département pour 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« . Nous venons d'écrire "UTILISATION (ID du département)" .
  • SQLite déduit automatiquement la condition de jointure et compares 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 REJOINDRE Exemple

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 INNER JOIN, vous devez spécifier une condition de jointure que la jointure interne utilise pour joindre les deux tables. Alors que dans la jointure naturelle, vous n'écrivez pas de condition de jointure. Vous écrivez simplement les noms des deux tables sans aucune condition. Ensuite, la jointure naturelle testera automatiquement l'égalité entre les valeurs de chaque colonne existant dans les deux tables. La jointure naturelle déduit 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

  • Nous n'avons pas besoin d'écrire une condition de jointure avec des noms de colonnes (comme nous l'avons fait dans INNER JOIN). Nous n'avons même pas eu besoin d'écrire le nom de la colonne une seule fois (comme nous l'avons fait 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

SQLite Exemple de jointure naturelle

  • Le Natural JOIN vous donnera exactement le même résultat que le résultat que nous avons obtenu des exemples INNER JOIN et JOIN USING. Parce que dans notre exemple, les trois requêtes sont équivalentes. Mais dans certains cas, le résultat sera différent d’une jointure interne puis d’une jointure naturelle. Par exemple, s'il existe plusieurs tables portant les mêmes noms, la jointure naturelle fera correspondre toutes les colonnes les unes aux autres. Cependant, la jointure interne correspondra uniquement aux colonnes dans la condition de jointure (plus de détails).tails sur la section suivante ; la différence entre la jointure interne et la jointure naturelle).

SQLite JOINT EXTERIEUR GAUCHE

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

Dans LEFT OUTER JOIN, toutes les valeurs des colonnes que vous sélectionnez dans le tableau de gauche seront incluses dans le résultat de la question, donc, peu importe que la valeur corresponde ou non à la condition de jointure, elle sera incluse dans le résultat.

Ainsi, si la table de gauche comporte « n » lignes, les résultats de la requête comporteront « n » lignes. Cependant, pour les valeurs des colonnes provenant de la table de droite, si une valeur ne correspond pas à la condition de jointure, elle contiendra une valeur « 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 la suitewing Par exemple, nous allons essayer le « LEFT JOIN » pour joindre les deux tables « Étudiants » et « Départements » :

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

SQLite Exemple de jointure externe gauche

  • Comme vous pouvez le voir, toutes les lignes du tableau des étudiants sont incluses, soit 10 étudiants au total. Même si les identifiants du quatrième et dernier étudiant, Jena et George, n'existent pas dans la table Départements, ils sont également inclus.
  • Et dans ces cas, la valeur DepartmentName pour Jena et George sera « nulle » car la table départements n'a pas de nom de département correspondant à leur valeur DepartmentId.

Donnons à la requête précédente utilisant la jointure gauche une explication plus approfondie à l'aide de diagrammes de Van :

SQLite JOINT EXTERIEUR GAUCHE

SQLite JOINT EXTERIEUR GAUCHE

Le LEFT JOIN donnera tous les noms d'étudiants de la table des étudiants même si l'étudiant a un identifiant de département qui n'existe pas dans la table des départements. Ainsi, la requête ne vous donnera pas uniquement les lignes correspondantes comme INNER JOIN, mais vous donnera la partie supplémentaire qui contient les lignes non correspondantes de la table de gauche qui est la table des étudiants.

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 le CROSS JOIN.

La SQLite entraînera des résultats logiques définis en combinant toutes les valeurs du premier tableau avec toutes les valeurs du deuxième tableau.

Par exemple, si vous avez sélectionné une colonne de la première table (colA) et une autre colonne de la deuxième table (colB). Le colA contient deux valeurs (1,2) et le 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).
  • Commewise, 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 suitewing requête, nous allons essayer CROSS JOIN entre les tables Étudiants et Départements :

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

Explication

  • Dans le 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, juste les deux tables combinées avec CROSS JOIN au milieu d'elles.

Sortie

SQLite Exemple de jointure croisée

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 suitwing:

  • 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 correspondent au deuxième élève John.
  • Quatre valeurs pour les quatre départements du tableau des départements correspondent au troisième élève Jack… et ainsi de suite.

Résumé

En utilisant SQLite Requête JOIN, vous pouvez lier une ou plusieurs tables ou sous-requêtes ensemble pour sélectionner des colonnes dans les deux tables ou sous-requêtes.