Les jointures

Les jointures servent à associer les enregistrements d’une table avec les enregistrements d’une autre table. Il existe plusieurs types de jointures, nous allons toutes les passer en revue.

CROSS JOIN

Un CROSS JOIN sert à associer toutes les lignes de la première table avec toutes les lignes de la seconde table:

tutorial=> select nom,prenom,classes.classe from eleves cross join classes;
     nom      |  prenom  |  classe
--------------+----------+-----------
 Sophie       | Favier   | Terminale
 Pierre       | Perret   | Terminale
 Jean Jacques | Goldman  | Terminale
 Jacques      | Brel     | Terminale
 Jacques      | Martin   | Terminale
 Mel          | Gibson   | Terminale
 François     | Hollande | Terminale
 Donald       | Trump    | Terminale
 Etienne      | Martin   | Terminale
 Sophie       | Favier   | Première
 Pierre       | Perret   | Première
 Jean Jacques | Goldman  | Première
 Jacques      | Brel     | Première
 Jacques      | Martin   | Première
 Mel          | Gibson   | Première
 François     | Hollande | Première
 Donald       | Trump    | Première
 Etienne      | Martin   | Première
 Sophie       | Favier   | Seconde
 Pierre       | Perret   | Seconde
 Jean Jacques | Goldman  | Seconde
 Jacques      | Brel     | Seconde
 Jacques      | Martin   | Seconde
 Mel          | Gibson   | Seconde
 François     | Hollande | Seconde
 Donald       | Trump    | Seconde
 Etienne      | Martin   | Seconde
(27 rows)

tutorial=>

Noter que lorsque le nom d’une colonne est commune aux deux tables, il faut la différencier en précisant la table devant.

INNER JOIN

Un INNER JOIN

Une requête INNER JOIN permet d’associer les données d’une table avec une autre table selon un critère commun que l’on spécifie après le mot clef ON:

tutorial=> select nom,prenom,classes.classe from eleves inner join classes on eleves.classe = classes.id;
     nom      |  prenom  |  classe
--------------+----------+-----------
 Sophie       | Favier   | Terminale
 Pierre       | Perret   | Terminale
 Jean Jacques | Goldman  | Terminale
 Jacques      | Brel     | Première
 Jacques      | Martin   | Seconde
 Mel          | Gibson   | Première
 François     | Hollande | Seconde
 Donald       | Trump    | Première
 Etienne      | Martin   | Seconde
(9 rows)

Un OUTER JOIN

Ce type de jointure fonctionne de la même façon que le INNER JOIN sauf que lorsque que la condition n’est pas remplie, elle retourne une valeur NULL.

Il y a trois type de OUTER JOIN:

Rajoutons un élève qui ne serait dans aucune classe dans notre table:

tutorial=> insert into eleves (nom,prenom) values ('Mitterand','François');
INSERT 0 1
tutorial=> select nom,prenom,classes.classe from eleves LEFT OUTER join classes on eleves.classe = classes.id;
     nom      |  prenom  |  classe
--------------+----------+-----------
 Sophie       | Favier   | Terminale
 Pierre       | Perret   | Terminale
 Jean Jacques | Goldman  | Terminale
 Jacques      | Brel     | Première
 Jacques      | Martin   | Seconde
 Mel          | Gibson   | Première
 François     | Hollande | Seconde
 Donald       | Trump    | Première
 Etienne      | Martin   | Seconde
 Mitterand    | François |
(10 rows)

index suite…