Tables de jointure SQLite: interne, naturelle, externe gauche, croisée (exemples)

Table des matières:

Anonim

SQLite prend en charge différents types de jointures SQL, 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.

Dans ce didacticiel, vous apprendrez-

  • Introduction à la clause SQLite JOIN
  • JOINTURE INTERNE
  • REJOINDRE… UTILISER
  • JOINT NATUREL
  • JOINTURE EXTERNE GAUCHE
  • JOINDRE CROISÉ

Introduction à la clause SQLite JOIN

Lorsque vous travaillez sur une base de données avec plusieurs tables, vous devez souvent obtenir des données à partir de ces multiples tables.

Avec la clause JOIN, vous pouvez lier deux ou plusieurs tables ou sous-requêtes en les joignant. En outre, vous pouvez 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 (INNER JOIN, LEFT OUTER JOIN ou CROSS JOIN).
  • JOIN-constraint - après avoir spécifié les tables ou 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 exemples suivants, vous devez exécuter sqlite3.exe et ouvrir une connexion à la base de données exemple en cours d'exécution:

Étape 1) Dans cette étape,

  1. Ouvrez Poste de travail et accédez au répertoire suivant " C: \ sqlite " et
  2. Ensuite, ouvrez " sqlite3.exe ":

Étape 2) Ouvrez la base de données " TutorialsSampleDB.db " par la commande suivante:

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

JOINTURE INTÉRIEURE SQLite

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.

Exemple

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

SÉLECTIONNERStudents.StudentName,Départements.DepartmentNameDES étudiantsINNER 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.

Production:

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

JOIN SQLite… UTILISATION

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 ont 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 de colonne et SQLite le détectera.

La différence entre INNER JOIN et JOIN… EN UTILISANT:

Avec "JOIN

… EN UTILISANT "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 l'écrivons comme" table1 JOIN table2 UTILISATION (cola) ".

Exemple

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

SÉLECTIONNERStudents.StudentName,Départements.DepartmentNameDES étudiantsINNER JOIN Départements UTILISATION (DepartmentId);

Explication

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

Production

  • Cela vous donnera le même résultat exact que l'exemple précédent:

JOINTURE NATURELLE SQLite

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 NATURAL JOIN:

  • I n 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 pour chaque colonne existe 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 mises en correspondance les unes avec les 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

SÉLECTIONNERStudents.StudentName,Départements.DepartmentNameDES étudiantsDépartements Natural JOIN;

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 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 de la comparaison DepartmentId des deux tables Students et Departments.

Production

  • Le Natural JOIN vous donnera la même sortie exacte que la sortie que nous avons obtenue des exemples INNER JOIN et JOIN USING. Parce que dans notre exemple, les trois requêtes sont équivalentes. Mais dans certains cas, la sortie sera différente de la jointure interne puis dans une jointure naturelle. Par exemple, s'il y a plus de tables avec les mêmes noms, la jointure naturelle fera correspondre toutes les colonnes entre elles. Cependant, la jointure interne correspondra uniquement aux colonnes de la condition de jointure (plus de détails dans la section suivante; la différence entre la jointure interne et la jointure naturelle).

JOINTURE EXTÉRIEURE GAUCHE SQLite

Le standard SQL définit trois types de jointures externes: GAUCHE, DROITE et FULL, mais SQLite ne prend en charge que la jointure externe gauche.

Dans LEFT OUTER JOIN, toutes les valeurs des colonnes que vous sélectionnez dans la table de gauche seront incluses dans le résultat de la requête, donc quelle que soit la valeur correspondant ou non à la condition de jointure, elle sera incluse dans le résultat.

Donc, si la table de gauche a «n» lignes, les résultats de la requête auront «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), plus les lignes non correspondantes de la table de gauche.

Exemple

Dans l'exemple suivant, nous allons essayer le "GAUCHE JOIN" pour joindre les deux tables "Etudiants" et "Départements":

SÉLECTIONNERStudents.StudentName,Départements.DepartmentNameFROM étudiants - c'est le tableau de gaucheGAUCHE JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Explication

  • 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 la jointure de gauche est la table de droite.
  • La clause OUTER est facultative; LEFT OUTER JOIN est identique à LEFT JOIN.

Production

  • Comme vous pouvez le voir, toutes les lignes du tableau des étudiants sont incluses, soit 10 étudiants au total. Même si le quatrième et le dernier étudiant, Jena et George departmentIds, n'existe pas dans la table Departments, ils sont également inclus.
  • Et dans ces cas, la valeur departmentName pour Jena et George sera "null" car la table departmentName n'a pas de departmentName qui correspond à leur valeur departmentId.

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

La jointure à gauche 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 sans correspondance 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 "null" pour nom de département, car il n'y a pas de valeur correspondante pour lui, et ces valeurs sont les valeurs des lignes non correspondantes.

JOINTURE CROISÉE SQLite

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 seconde table.

Ainsi, pour chaque valeur de la première table, vous obtiendrez 'n' correspondances de la deuxième table où n est le nombre de secondes lignes de la table.

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.

Le SQLite aboutira à un ensemble de résultats logiques en combinant toutes les valeurs de la première table avec toutes les valeurs de la seconde table.

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).
  • 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:

SÉLECTIONNERStudents.StudentName,Départements.DepartmentNameDES étudiantsDépartements CROSS JOIN;

Explication

  • Dans la clause select, nous venons de sélectionner deux colonnes "studentname" de la table des étudiants et le "departmentName" de la table des départements.
  • Pour la jointure croisée, nous n'avons spécifié aucune condition de jointure uniquement les deux tables combinées avec CROSS JOIN au milieu.

Production:

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

  • Quatre valeurs pour les quatre départements du tableau des départements correspondent au premier étudiant Michel.
  • Quatre valeurs pour les quatre départements du tableau des départements correspondent au deuxième étudiant John.
  • Quatre valeurs pour les quatre départements du tableau des départements correspondent au troisième étudiant Jack.

    … etc.

Résumé

À l'aide de SQLite JOINs, vous pouvez lier une ou plusieurs tables ou sous-requêtes pour sélectionner des colonnes dans les deux tables ou sous-requêtes.