Getsuyodev, Programming is mainly used when constructing an application. Programming requires knowledge of application domains, algorithms, and programming language expertise. Programming can be developed in different logic based on developer knowledge.

SGBD – SQL – LMD – Opérations de jointures

Système de gestion de base de données



Introduction:

Ce chapitre a pour but de vous présenter les différents types de jointure, les opérations de jointure et d’une manière générale, le travail avec des données issues de plusieurs tables.

Seront traités dans ce document : ü Les opérateurs ensemblistes ü La méthode des prédicats ü Les différentes natures de jointure (equi-jointure, jointure droite,     gauche et totale)

Requêtes intégrant plusieurs tables:

Nous allons aborder ici la mise en œuvre de requêtes portant sur plusieurs tables. Deux méthodes sont à notre disposition, la méthode ensembliste et la méthode prédicative. Ces deux méthodes réalisent des jointures.

La jointure consiste à rechercher entre deux tables ayant un attribut commun (même type et même domaine de définition) tous les tuples (toutes les lignes) pour lesquels ces attributs ont la même valeur.

  • la méthode ensembliste réalise l’intersection de deux ensembles et s’exprime sous forme de requêtes imbriquées.
  • L a méthode prédicative vérifie l’égalité de deux attributs et s’exprime sous la forme d’une seule sélection conditionnelle.

La méthode ensembliste:

La requête à l’intérieur des parenthèses est dite requête interne ou sous-requête. Elle est évaluée en premier, constituant ainsi un premier ensemble dont on réalisera l’intersection (IN) avec l’ensemble issu de l’évaluation de la requête externe.

Les attributs sélectionnés, et retenus dans le jeu de résultat, sont nécessairement issus de la requête externe. Il s’agit donc d’une méthode assez restrictive.

Liste des pilotes assurant un vol au départ de Paris:

Liste des pilotes qui ne sont pas affectés à des vols:

La méthode ensembliste:

L’attribut de jointure est une valeur scalaire et ne peut donc être une valeur vectorielle. Ainsi, vous ne pouvez pas écrire une requête sous la forme qui suit :

On ne pourra pas non plus écrire la requête suivante :

Car l’attribut VILLEDEPART n’appartient pas à la table sur laquelle porte la requête externe (PILOTE). Vous obtenez un message d’erreur :

 Serveur : Msg 207, Niveau 16, État 3, Ligne 1 
 'VILLEDEPART' : nom de colonne incorrect. 

On peut par contre joindre un attribut avec un attribut qui résulte d’une opération récapitulative.

Nous pouvons ainsi obtenir la liste des avions dont la capacité en passagers est égale à la capacité maximum.

Si nous souhaitons préciser qu’il s’agit en fait des avions qui ont la capacité maximum du type, nous modifierons instinctivement la requête comme suit, afin de calculer le maximum selon le type :

  • Ce qui est faux, car un Airbus A320 se trouve être  retenu car sa capacité vaut la capacité maximum des avions de type Caravelle !
  • En fait, pour obtenir un résultat exact, il nous faut corréler les lignes de la requête externe avec celles de la requête interne. Tous les SGBDR ne sont pas en capacité de réaliser ce type d’opérations.
  • Elles sont à utiliser avec parcimonie dans la mesure du possible car très coûteuses en matière de ressources et donc de temps de traitement.

En fait, la requête interne se trouve évaluée pour chaque ligne de la requête externe !

Solution  >> Requête corrélée

On peut utiliser les opérateurs SOME, ANY, ou ALL pour comparer la valeur d’une expression avec les valeurs d’un attribut d’une requête interne.

Exemple: La liste des avions dont la capacité est supérieure à toute capacité des avions de marque Boeing?

En modifiant la requête et en remplaçant ALL par ANY ou SOME, nous obtenons la liste de tous les avions dont la capacité est > 200.

  • EXISTS peut être utilisé pour réaliser des intersections ou des différences entre deux requêtes.
  • Ce n’est pas la meilleure forme d’utilisation, car elle fait appel à des requêtes corrélées et peut s’écrire plus simplement.
  • Liste des pilotes qui habitent la ville de départ d’un vol?

Remarque : Cette requête serait mieux écrite ainsi :

  • EXCEPT et INTERSECT sont de nouveaux opérateurs permettant de trouver des enregistrements communs à deux jeux de données ou de retrouver des enregistrements figurant dans un jeu de données et pas dans l’autre.
  • Ces opérateurs obéissent aux mêmes règles que UNION, les jeux d’enregistrement doivent être de structure identique (même nombre de colonnes, mêmes types voire même longueur).

La méthode prédicative:

  • La requête comporte une seule instruction SELECT qui traite plusieurs  tables dont la liste apparaît dans la clause FROM.
  • La traduction de la jointure se fait par une équation de jointure (égalité entre 2 attributs) exprimée au niveau de la clause FROM.

La méthode prédicative :

Il existe quatre natures de jointure qui sont respectivement exprimées par les mots clés:

INNER
RIGHT OUTER
LEFT OUTER
FULL OUTER

  • La méthode prédicative permet de rapporter dans le jeu de résultats les valeurs des attributs des différentes tables définies dans la clause FROM.
  • Cette méthode est en général préférable à la méthode ensembliste car plus performante.

La méthode prédicative: Jointure interne

INNER JOIN : 

  • jointure interne pour retourner les enregistrements quand la condition est vrai dans les 2 tables. C’est l’une des jointures les plus communes. ü ü
  • Spécifie toutes les paires correspondantes de lignes renvoyées. Supprime les lignes n’ayant pas de correspondance entre les deux tables. Ceci est l’option par défaut si aucun type de jointure n’est spécifié.

Exemple : Liste des avions affectés à des vols avec la mention de la ville de départ du vol?

La méthode prédicative: Jointure externe gauche

LEFT JOIN (ou LEFT OUTER JOIN) : 

  • jointure externe pour retourner tous les enregistrements de la table de gauche (LEFT = gauche) même si la condition n’est pas vérifié dans l’autre table.
  • Spécifie que toutes les lignes de la table de gauche ne respectant pas la condition de jointure sont comprises dans l’ensemble de résultats, et que les colonnes de sortie de l’autre table sans correspondance ont des valeurs NULL.

Exemple : Liste de tous les avions avec, pour ceux qui volent, des informations sur les villes de départ?

La méthode prédicative (13): Jointure externe droite

RIGHT JOIN (ou RIGHT OUTER JOIN) : 

  • jointure externe pour retourner tous les enregistrements de la table de droite (RIGHT = droite) même si la condition n’est pas vérifié dans l’autre table.
  • Spécifie que toutes les lignes de la table de droite ne respectant pas la condition de jointure sont comprises dans l’ensemble de résultats, et que les colonnes de sortie correspondant à l’autre table ont des valeurs NULL.

La méthode prédicative: Jointure full

FULL JOIN (ou FULL OUTER JOIN) :

  • jointure externe pour retourner les résultats quand la condition est vrai dans au moins une des 2 tables.
  • Précise qu’une ligne de la table de gauche ou de droite, qui ne correspond pas à la condition de jointures, est comprise dans l’ensemble de résultats et que les colonnes de sortie sans correspondance dans l’autre table ont des valeurs nulles. Ceci est fourni en plus de toutes les lignes renvoyées par INNER JOIN.

La méthode prédicative: Auto jointure

Auto-jointure:

L’auto-jointure est la jointure entre une table et elle-même, pour sélectionner des enregistrements correspondant à d’autres de la même table. Il est nécessaire de recourir alors à des alias pour définir la table déjà utilisée.

Exemple : Liste des avions de même capacité?

Exemples:

Différence : Liste des avions non affectés à des vols

3 tables 2 à 2 jointes : Liste des vols avec  des informations sur pilotes et avions


Comments are closed, but trackbacks and pingbacks are open.

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More