Rappels et compléments sur les jointures
Jointure naturelle
Cette jointure s'effectue à la condition qu'il y ait des colonnes du même nom et de même type dans les 2 tables.
exemple :
SELECT t1.champ_commun, t2.champ13, t1.champ6
FROM nom_schema.ma_table1
NATURAL JOIN nom_schema.ma_table2 ;
L'avantage d'un NATURAL JOIN c'est qu'il n'y a pas besoin d'utiliser la clause ON qui permet de préciser la condition de jointure.
Jointure explicite
Dans tous les autres cas on parle de jointure explicite.
Utilisation de JOIN...ON
La syntaxe utilisant la clause WHERE pour indiquer la condition de jointure n'est pas la plus recommandée. En effet, elle sert à la fois pour écrire la condition de jointure (ex : t1.champ_commun = t2.champ_commun) et pour un éventuel filtrage des données.
exemple si on souhaite ne conserver que les lignes pour lesquelles le champ population de t1 est > 5000 on écrira :
SELECT t1.champ_commun, t2.champ13, t1.champ6
FROM
nom_schema.ma_table1 AS t1,
nom_schema.ma_table2 AS t2
WHERE t1.champ_commun = t2.champ_commun AND t1.population > 5000;
Pour éviter cette confusion entre filtrage et condition de jointure il est donc préférable d'utiliser l'opérateur de jointure normalisé JOIN :
SELECT t1.champ_commun, t2.champ13, t1.champ6
FROM nom_schema.ma_table1 AS t1,
JOIN nom_schema.ma_table2 AS t2
ON t1.champ_commun = t2.champ_commun
WHERE t1.population > 5000;
Conseil :
Cette syntaxe est plus lisible (séparation de la condition de jointure de la condition de filtrage).
De plus il est possible de contrôler jusqu'à un certain point le planificateur en utilisant la syntaxe explicite (JOIN). Voir la documentation PostgreSQL sur ce sujet.
A partir de maintenant nous utiliserons systématiquement cette syntaxe.