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âche
SELECT * FROM Personnes
WHERE CodePersonne IN ( SELECT CodeResponsable FROM Tâches
WHERE CodeResponsable IS NOT NULL
)
Exemple2 : Liste des personnes n’ayant aucune tâche
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 A
WHERE Capacite IN ( SELECT MAX(capacite) FROM avion
WHERE TypeAvion = A.TypeAvion
)
Exemple4 : Liste des pilote qui ont le salaire minimal dans leur ville.
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_colonnes
FROM Table_1, Table_2, … , Table_n
WHERE condition_de_jointure
Exemple5 : Liste des tâches affectées à une personne avec nom et prénom de la personne
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 personne
SELECT CodeTâche, Objet, Tâches2.CodePersonne, Nom, Prénom
FROM Tâches2 , Personnes
WHERE Tâches2.CodePersonne = Personnes.CodePersonne
on peut résoudre l’ambiguïté pas Alias
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_colonnes
FROM table_gauche
CROSS JOIN table_droite
Equivalent à :
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_colonnes
FROM table_gauche
[ INNER ] JOIN table_droite
ON condition_de_jointure
Exemple7 : Liste des tâches affectées à une personne avec nom et prénom de celle-ci
SELECT Tâches.* , Nom , Prénom FROM Tâches
JOIN Personnes ON CodeResponsable = CodePersonne
Exemple8 : Liste des tâches affectées à une personne avec nom et prénom de la personne pour les personnes dont le nom est ‘Amlal’
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_colonnes
FROM table_gauche
LEFT [ OUTER ] JOIN table_droite
ON condition_de_jointure
Exemple9 : Liste de toutes les tâches avec nom et prénom du responsable s’il y a lieu
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_colonnes
FROM table_gauche
RIGHT [ OUTER ] JOIN table_droite
ON condition_de_jointure
Exemple10 : Noms et prénoms de tous les hommes avec noms et prénoms de leurs femmes pour les hommes mariées
SELECT H.Nom, H.Prenom, F.Nom, F.Prenom
FROM Femmes F
RIGHT JOIN Hommes H
ON F.Conjoint = H.Code
Exemple11 : Noms et prénoms de tous les hommes non mariés
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_colonnes
FROM table_gauche
FULL[ OUTER ] JOIN table_droite
ON condition_de_jointure
Exemple12 : Informations de tous les hommes et les femmes en mettant en évidence chaque couple marié
SELECT H.* , F.*  FROM Hommes H 
FULL JOIN Femmes F ON F.Conjoint = H.Code

conclusion

cours sql server (sgbd) jointure
Pour plus comprendre : TP + correction
Pour plus comprendre : TP - les jointures

Aucun commentaire :

Enregistrer un commentaire