Introduction
La notion de jointure est liée à l’extraction d’informations à partir de deux ou plusieurs tables en mettant en relation des colonnes spécifiées.Méthode ensembliste – Sous requête
Schéma général:SELECT liste_d_attributs
FROM première_table
WHERE attribut_de_jointure IN ( SELECT attribut_de_jointure
FROM deuxième_table
WHERE condition
)
* Requête externe
* Requête interne (Sous requête)
Exemple1 : Liste des personnes ayant une tâcheSELECT * FROM PersonnesExemple2 : Liste des personnes n’ayant aucune tâche
WHERE CodePersonne IN ( SELECT CodeResponsable FROM Tâches
WHERE CodeResponsable IS NOT NULL
)
SELECT * FROM Personnes
WHERE CodePersonne NOT IN ( SELECT CodeResponsable FROM Tâches
WHERE CodeResponsable IS NOT NULL
)
Remarque : La sous requête doit retourner un résultat d’une seule colonne de même type que l’expression précédant IN
Remarque : Les colonnes de la sous-requête ne sont pas accessibles à la requête externe
Méthode ensembliste - Sous requête corrélée
Une sous requête corrélée est une sous requête qui fait référence à la requête externe. Ce type de requête n’est pas disponible sur tous les SGBDR.SELECT * FROM avion AExemple4 : Liste des pilote qui ont le salaire minimal dans leur ville.
WHERE Capacite IN ( SELECT MAX(capacite) FROM avion
WHERE TypeAvion = A.TypeAvion
)
SELECT * FROM pilote P
WHERE SalaireBrut IN ( SELECT MIN(SalaireBrut) FROM pilote
WHERE Ville = P.Ville
)
Méthode prédicative – Jointure par Where
Syntaxe globale:SELECT liste_de_colonnesExemple5 : Liste des tâches affectées à une personne avec nom et prénom de la personne
FROM Table_1, Table_2, … , Table_n
WHERE condition_de_jointure
SELECT CodeTâche, Objet, CodeResponsable, Nom, Prénom
FROM Tâches , Personnes
WHERE CodeResponsable = CodePersonne
Remarque : Lorsque les deux tables ont des colonnes ayant le même nom, Il faut précéder les colonnes dupliquées par le nom de la table.
Exemple6 : Liste des tâches affectées à une personne avec nom et prénom de la personneSELECT CodeTâche, Objet, Tâches2.CodePersonne, Nom, Prénomon peut résoudre l’ambiguïté pas Alias
FROM Tâches2 , Personnes
WHERE Tâches2.CodePersonne = Personnes.CodePersonne
SELECT CodeTâche, Objet, T.CodePersonne, Nom, Prénom
FROM Tâches2 T, Personnes P
WHERE T.CodePersonne = P.CodePersonne
Méthode prédicative – Jointure croisée
Principe:La jointure croisée retourne le produit cartésien des deux tables gauche et droite.
Syntaxe globale:
SELECT liste_de_colonnesEquivalent à :
FROM table_gauche
CROSS JOIN table_droite
SELECT liste_de_colonnes FROM table_gauche, table_droite
Méthode prédicative – Jointure interne
Principe:La jointure interne retourne uniquement les lignes issues des deux tables gauche et droite et qui satisfont la condition de jointure.
Syntaxe globale:
SELECT liste_de_colonnesExemple7 : Liste des tâches affectées à une personne avec nom et prénom de celle-ci
FROM table_gauche
[ INNER ] JOIN table_droite
ON condition_de_jointure
SELECT Tâches.* , Nom , Prénom FROM TâchesExemple8 : Liste des tâches affectées à une personne avec nom et prénom de la personne pour les personnes dont le nom est ‘Amlal’
JOIN Personnes ON CodeResponsable = CodePersonne
SELECT Tâches.*, Nom, Prénom FROM Tâches
JOIN Personnes ON CodeResponsable = CodePersonne
WHERE Nom ='Amlal'
Méthode prédicative – Jointure externe
Syntaxe globale:SELECT liste_de_colonnes
FROM table_gauche
{ LEFT | RIGHT| FULL} [ OUTER ] JOIN table_droite
ON condition_de_jointure
Jointure externe gauche ( LEFT )
Principe:On recherche toutes les lignes satisfaisant la condition de jointure, puis on rajoute toutes les lignes de la table de gauche qui n'ont pas été prises en compte au titre de la satisfaction du critère de jointure.
Syntaxe globale:
SELECT liste_de_colonnesExemple9 : Liste de toutes les tâches avec nom et prénom du responsable s’il y a lieu
FROM table_gauche
LEFT [ OUTER ] JOIN table_droite
ON condition_de_jointure
SELECT Tâches.*, Nom, Prénom FROM Tâches
LEFT JOIN Personnes ON CodeResponsable = CodePersonne
Jointure externe droite ( RIGTH )
Principe:On recherche toutes les lignes satisfaisant la condition de jointure, puis on rajoute toutes les lignes de la table de droite qui n'ont pas été prises en compte au titre de la satisfaction du critère de jointure.
Syntaxe globale:
SELECT liste_de_colonnesExemple10 : Noms et prénoms de tous les hommes avec noms et prénoms de leurs femmes pour les hommes mariées
FROM table_gauche
RIGHT [ OUTER ] JOIN table_droite
ON condition_de_jointure
SELECT H.Nom, H.Prenom, F.Nom, F.PrenomExemple11 : Noms et prénoms de tous les hommes non mariés
FROM Femmes F
RIGHT JOIN Hommes H
ON F.Conjoint = H.Code
SELECT H.Nom, H.Prenom FROM Femmes F
RIGHT JOIN Hommes H ON F.Conjoint = H.Code
WHERE F.Code IS NULL
Jointure externe Complète( FULL )
Principe:On recherche toutes les lignes satisfaisant la condition de jointure, puis on rajoute toutes les lignes de la table de gauche et de droite qui n'ont pas été prises en compte au titre de la satisfaction du critère de jointure.
Syntaxe globale:
SELECT liste_de_colonnesExemple12 : Informations de tous les hommes et les femmes en mettant en évidence chaque couple marié
FROM table_gauche
FULL[ OUTER ] JOIN table_droite
ON condition_de_jointure
SELECT H.* , F.* FROM Hommes H
FULL JOIN Femmes F ON F.Conjoint = H.Code
conclusion
Pour plus comprendre : TP + correction
Pour plus comprendre : TP - les jointures
Aucun commentaire :
Enregistrer un commentaire