WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

Gestion d'informations. Mutation vers les bases de données relationnelles et le langage SQL.


par Jacques MUDUMBI
Université de Yaoundé 1 - Master 2017
  

précédent sommaire suivant

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

IV.5.3. Les jointures

On appelle jointure une opération permettant de combiner des informations issues de plusieurs tables. Elle se formule simplement en spécifiant, dans la clause FROM , le nom des tables concernées et, dans la clause WHERE, les conditions qui vont permettre de réaliser la jointure (en effet, si l'on ne précise pas de condition de sélection, on obtient le produit cartésien des tables présentes derrière le FROM, ce qui n'est en général pas souhaité).

Or, structurellement, il existe plusieurs types de jointures (cfr. figure IV.1) :

Equi-jointure (ou jointure naturelle, ou jointure interne) : permet de relier deux colonnes appartenant à deux tables différentes mais ayant le même "sens" et venant vraisemblablement d'une relation 1-N lors de la conception. Les tables sont reliées par une relation d'égalité entre leur attribut commun ou, à partir de SQL2, avec la clause INNER JOIN.

Cas pratique : Donner le nom de chaque employé et la ville où il/elle travaille

SELECT employes.nom, Ville FROM employes, departements WHERE employes._num_dep=departements.num_dep;

ou

SELECT employes.nom, departements.ville FROM employes

79

INNER JOIN departements ON employes._num_dep = departements.num_dep;

Auto-jointure: cette jointure d'une table à elle-même permet derelier des informations venant d'une ligne d'une table avec des informations venant d'une autre ligne de la même table. Dans ce cas, il faut renommer au moins l'une des deux occurrences de la table pour pouvoir préfixer sans ambiguïté chaque nom de colonne.

Cas pratique : Donner pour chaque employé le nom de son supérieur hiérarchique

SELECT employes.nom, superieurs.nom FROM employes, employes AS superieurs WHERE employes._superieur=superieurs.num_emp;

ou

SELECT employes.nom, superieurs.nom FROM employes INNER JOIN employes AS superieurs

ON employes._superieur=superieurs.num_emp;

O-jointure: si le critère d'égalité correspond à la jointure la plus naturelle, les autres opérateurs de comparaison sont également utilisables dans le prédicat de jointure. Néanmoins, cette possibilité doit être utilisée avec précaution car elle peut entraîner une explosion combinatoire (on rappelle qu'une jointure ne constitue qu'une restriction du produit cartésien de deux relations ou plus).

Cas pratique : Quels sont les employés gagnant plus que Victor ?

SELECT e1.nom, e1.salaire, e1.fonction FROM employes AS e1, employes AS e2 WHERE e1.salaire>e2.salaire AND e2.nom='Victor';

Jointure externe: lorsqu'une ligne d'une table figurant dans une jointure n'a pas de correspondant dans les autres tables, elle ne satisfait pas au critère d'équi-jointure et ne figure donc pas dans le résultat de la requête. Une jointure externe est une jointure qui favorise l'une des tables en affichant toutes ses lignes, qu'il y ait ou non correspondance avec l'autre table de jointure. Les colonnes pour lesquelles il n'y a pas de correspondance sont remplies avec la valeur NULL. Pour définir une telle jointure, on utilise les clauses LEFT OUTER JOIN (jointure externe gauche) et RIGHT OUTER JOIN (jointure externe droite).

Cas pratique : Le département de Cambridge n'apparaissait pas dans l'exemple de l'équi-jointure, mais figurera ici :

SELECT employes.nom, departements.ville FROM employes

RIGHT JOIN departements ON employes._num_dep = departements.num_dep;

Cas pratique : Le Président Patton, sans supérieur hiérarchique, n'apparaissait pas dans l'exemple de l'autojointure, mais figurera ici (avec NULL comme nom desupérieur) :

80

SELECT employes.nom, superieurs.nom FROM employes

LEFT JOIN employes AS superieurs ON employes._superieur=superieurs.num_emp;

Cas pratique : Retrouver les départements n'ayant aucun employé :

SELECT departements.num_dep, employes.nom FROM employes

RIGHT JOIN departements ON employes._num_dep = departements.num_dep WHERE employes.nom IS NULL;

Equi-jointure Auto-jointure Jointure externe

Figure IV.1. Les différents types de jointures

précédent sommaire suivant






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"Il faudrait pour le bonheur des états que les philosophes fussent roi ou que les rois fussent philosophes"   Platon