JOIN dans SQL: comment associer deux ou plusieurs tables
Dans ce tutoriel, nous vous montrons comment joindre plusieurs tables sur une même requête JOIN dans SQL.
On continue avec la même base de données des Étudiants ( Cette fois-ci, on va les appeler des élèves) Vue dans le précédent cours.
Extraire des information depuis une table avec SQL
Nous pouvons obtenir toutes les données à partir d’une table comme suit (en utilisant la table Élève comme exemple:
SELECT * FROM "Eleve;
Essayons de récupérer les données de deux tables de la même manière
SELECT * FROM "Eleve", "Ayant reussi" ;
On peut extraire plus d’informations et préciser la demande grâce à l’instruction From et Where
Nous pouvons nommer les tables grâce à la clause FROM, mais de préciser les champs à extraire grâce à la clause Where.
élèves_id est la clé des données dans la table élève.
Les données des tables “Élève” et “ayant réussi” sont liées les unes aux autres. Il convient seulement de noter que si la note pour un élève donné dans nos données, ce grand tableau montre la note obtenue de l’élève pour chaque membre de la classe, mais la note obtenue par l’élève doit être interprétée comme une valeur numérique.
Syntaxe:
SELECT table1.nomcolonne1, table1.nomcolonne2, table2.nomcolonne3 FROM table1, table2
WHERE table1.nomcolonne = table2.nomcolonne ;
Dans la clause WHERE, le nom de la colonne représente les champs liés les uns aux autres par des clés étrangères. Dans le cas d’une table, il s’agit d’une clé primaire, dans le cas d’une autre table, il s’agit d’une clé étrangère.
L’instruction JOIN
Dans le langage SQL, il existe également une instruction JOIN dans SQL qui vous permet d’associer des tables. À l’aide des instructions JOIN dans SQL, différentes tables peuvent être combinées de manière relativement similaire à l’instruction FROM … WHERE. L’instruction FROM est aussi appelée JOIN par défaut (JOIN implicite), c’est le moyen le plus simple de joindre des données et est tout à fait suffisant pour des tables beaucoup plus grandes que la nôtre. Il existe différentes opinions quand il s’agit de savoir : si les clauses FROM…WHERE sont plus pertinentes ou les clauses JOIN sont plus pertinentes.
Il existe également un certain nombre de variantes de JOIN explicites, telles que CROSS JOIN, INNER JOIN (si non spécifié, JOIN signifie INNER JOIN), LEFT OUTER JOIN, RIGHT OUTER JOIN
SELECT tableau1.colonne1, tableau2.colonne2...
DE table1
JOIN table2
ON table1.common_field = table2.common_field ;
Passons à notre base de données. Extrayons maintenant la note de chaque élève de la base de données avec le nom du coach.
SELECT prénom, nom, note_obtenue FROM "Eleve", "Ayant reussi" WHERE relation_avec_coach= 'coach'
ET "ayantreussi".student_id = "".ayantreussi;
ET "Ayantreussi".student_id = "Élève".Ayant reussi;
Si nous ne spécifions pas dans cette requête que relation_avec_coach de = ‘coach des élèves’, nous obtiendrions tous les élèves ayant bénéficié des conseils d’un coach du et la note serait affichée pour chacun d’eux.
Comment joindre plusieurs tables sur une même requête SQL ?
L’instruction JOIN dans SQL vous permet de combiner des interrogations (extractions d’informations) de deux tables ou plus dans une base de données relationnelle. Dans Structured Query Language (SQL), il existe trois types de JOIN : interne, externe et croisé. Dans des cas particuliers, une table peut se joindre elle-même, produisant une SELF-JOIN.
L’opération JOIN ou combinaison vous permet d’afficher les colonnes de plusieurs tables comme s’il s’agissait d’une table unique, en combinant les informations extraites associés les uns avec les autres à l’aide de clés étrangères.
Il existe plusieurs types d’instruction JOIN avec la syntaxe ANSI, qui peuvent être divisées en deux groupes – INNER JOIN et OUTER JOIN.
INNER JOIN renvoie uniquement les lignes qui existent dans les deux tables, alors OUTER JOIN renvoie toutes les lignes d’une table (selon le type de JOIN à utiliser) et les lignes d’une autre du tableau qui correspondent aux conditions données. Ensuite, chaque espèce sera examinée plus en détail.
INNER JOIN
Ce type renvoie des données qui correspondent à la fois à gauche et à droite dans la table. Un exemple est donné dans la requête.
SELECT Eleve.id, Eleve.Nomdefamille + ’ ’ +
eleve.Nom AS Nom, eleve, Rang DE Eleve
INNER JOIN Langue ON Eleve.id = Langue.Eleve WHERE
eleve Date de naissance > '2006-04-05';
LEFT JOIN
Renvoie toutes les lignes du tableau de gauche, que les lignes correspondent ou non à celles données.
Avec les conditions ou non et les lignes de la table de droite qui correspondent aux conditions données.
SELECT Eleve.id, Eleve.Nomdefamille + ’ ’ +
eleve.Nom AS Nom, eleve, Rang DE Eleve
LEFT JOIN Langue ON Eleve.id = Langue.Eleve WHERE
élève Date de naissance > '2006-04-05';
RIGHT JOIN
Renvoie toutes les lignes de la table de droite, que les lignes correspondent ou non
Avec les conditions données ou non et les lignes du tableau de gauche qui correspondent aux conditions données avec conditions.
SELECT Eleve.id, Eleve.Nomdefamille + ’ ’ +
eleve.Nom AS Nom, eleve, Rang DE Eleve
RIGHT JOIN Langue ON Eleve.id = Langue.Eleve WHERE
eleve Date de naissance > '2006-04-05';
Full OUTER JOIN
Le type JOIN OUTER donné renvoie des données indépendamment du fait que les valeurs correspondent à une autre table avec des données.
Un exemple est donné dans la requête:
SELECT Eleve.id, Eleve.Nomdefamille + ’ ’ +
eleve.Nom AS Nom, eleve, Rang DE l'Eleve
Full OUTER JOIN Langue ON Eleve.id = Langue.Eleve WHERE
eleve Date de naissance > '2006-04-05';
JOINT CROISÉ
Ce type JOIN renvoie une table avec potentiellement plusieurs lignes. Le nombre de lignes dans le résultat est égal
avec le nombre de lignes du premier tableau répété avec le nombre de lignes du second tableau. Chaque rangée est la première et la deuxième combinaison de tableaux.
SELECT Eleve.id, Eleve.Nomdefamille + ’ ’ +
Eleve.Nom AS Nom, Eleve, Rang DE LELEVE
CROSS JOIN Langue;