Dans la partie précédente, nous avons vu la syntaxe générale de l’ordre sql select. Nous avons détailler la clause where et les opérateurs qui peuvent etre utilisés pour décrire une restriction donnée.

Dans cette partie, nous voulons voir la syntaxe sql à utiliser pour exprimer l’opération de jointure (sql jointure) : pour mieux comprendre cette opération et son objectif ainsi que leurs cas d’utilisation, vous devez voir le cours : Algèbre relationnelle : opérations de jointure , produit cartésien et division

SQL: jointure

Pour exprimer une jointure, on met la liste des tables à lier dans clause FROM. La condition de  jointure sera affichée sur la clause WHERE.

Syntaxe:
SELECT  liste des attributs

FROM      liste des Tables (séparées par ,)

WHERE    condition (y compris la condition de jointure)

Exemple: Afficher les noms des clients qui ont acheté les produits de libellé Clavier.

   SELECT     C.nom

   FROM       CLIENT C, PRODUIT P,  VENTE V

   WHERE      C.numClt = V.numClt  AND P.codeP = V.codeP  AND P.libelle = ‘Clavier’

Jointure interne :

L’opération de jointure peut etre écrite sans utilisation de la  clause where. Pour ce faire , on utilise la syntaxe suivante :

SELECT …

FROM   <table gauche>

   [INNER]JOIN <table droite>

       ON <condition de jointure>

Exemple: Afficher les noms des clients qui ont acheté les produits de libellé Clavier. (le même exemple mais cette fois-ci on utilise la nouvelle syntaxe) :

  SELECT     C.nom

  FROM       CLIENT C inner join  Vente V on   C.numClt = V.numClt  inner join PRODUIT P on P.codeP = V.codeP

WHERE     P.libelle = ‘Clavier’ 

Cette fois , on a utiliser la deuxième syntaxe de l’opération de jointure .D’où, on a utilisé la clause where seulement pour faire la restriction (n’afficher que les résultats de jointure qui inclut des produits dont le libellé=’Clavier’).

L’avantage de cette facon de faire est que l’opération de jointure est présentée en totalité via la clause from seulement . Ce type de jointure qu’on a vu jusqu’à maintenant est appelé : jointure interne.

SQL : L'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é

SELECT AVION.AV#, AVION.MARQUE, AVION.TYPE,AVION.CAPACITE,

AV2.AV#, AV2.MARQUE, AV2.TYPEAVION, AVION.CAPACITE

FROM AVION, AVION AS “AV2”

ON AVION.CAPACITE = AV2.CAPACITE

WHERE AVION.AV# > AV2.AV#

A noter : L’expression de la clause WHERE pour éliminer les paires de lignes figurant plusieurs fois.

Exemple : Donner les noms des clients de la même ville que John

SELECT C2.nom  FROM client C1 , client C2

WHERE C1.ville = C2.ville   AND C1.nom = ‘John’   AND C2.nom <> ‘John’

Cet exemple utilise, pour le couplage des villes, la jointure de la table Client avec elle-même  (autojointure).

 Pour pouvoir distinguer les références ville dans les 2 copies, il faut introduire 2 alias différents C1 et C2 de la table client

SQL : Jointure externe

Dans le cas d’une jointure interne, lorsqu’une ligne d’une table ne satisfait pas la  condition de jointure, cette ligne n’apparaît pas dans le résultat final.

Il peut, cependant, être souhaitable de conserver les lignes d’une table (left ou right) qui ne répondent  pas à la condition de jointure. On parle alors de jointure externe (outer join).

Syntaxe de la jointure externe :

SELECT …

FROM   <table gauche>

       LEFT | RIGHT | FULL OUTER JOIN <table droite>

               ON condition de jointure

Si vous avez bien compris le cours ci-dessus, vous pouvez tester votre niveau d’apprentissage avec les exercices suivants : TD1 .

La section de cours suivante, va traiter la clause group by , la clause having et la clause order by.

Vous pouvez suivre la liste des vidéos du cours base de données (Merise + Sql + Transact sql) sur notre chaine youtube : Vidéos Bases de données.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *