Jointures entre les classes

Jusqu'à présent, nos requêtes n'ont accédé qu'a une classe. Les requêtes peuvent accéder à plusieurs classes en même temps, ou bien accéder à une classe de manière à ce que plusieurs instances de cette classe soient traitées en parallèle. Une requête qui accède à de multiples instances de classes est appelée requête de jointure. Nous pouvons par exemple chercher tous les enregistrements qui sont dans la chaîne température des autres enregistrements, ce qui implique de comparer les attributs temp_lo et le temp_hi de chaque instance EMP aux attributs temp_lo et temp_hi de toutes les autres instances EMP.

Note

Il s'agit d'un modèle conceptuel : la jointure effective peut être exécutée d'une manière plus efficace, mais l'utilisateur ne la perçoit pas obligatoirement.

Nous pouvons faire ceci avec la requête suivante :
SELECT W1.city, W1.temp_lo AS low, W1.temp_hi AS high,
    W2.city, W2.temp_lo AS low, W2.temp_hi AS high
    FROM weather W1, weather W2
    WHERE W1.temp_lo < W2.temp_lo
    AND W1.temp_hi > W2.temp_hi;

+--------------+-----+------+---------------+-----+------+
|city          | low | high | city          | low | high |
+--------------+-----+------+---------------+-----+------+
|San Francisco | 43  | 57   | San Francisco | 46  | 50   |
+--------------+-----+------+---------------+-----+------+
|San Francisco | 37  | 54   | San Francisco | 46  | 50   |
+--------------+-----+------+---------------+-----+------+
    

Note

La sémantique d'une jointure fait que la qualification est une expression vraie définie pour un produit cartésien des classes indiquées dans la requête. Pour ces instances dans le produit cartésien pour lequel la qualification est vraie, Postgres calcule et retourne les valeurs spécifiées dans la liste cible. Le SQL Postgres n'assigne aucune signification aux valeurs dupliquées. Ceci indique que Postgres recalcule parfois la même liste cible plusieurs fois; c'est d'ailleurs souvent le cas lorsque les expressions booléennes sont connectées avec un "OR". Pour supprimer ces doublons vous devrez utiliser la commande select distinct.

Dans ce cas, les W1 et W2 sont des substituts pour une instance de la classe weather, et les deux chaînes sur toutes les instances de la classe (dans la terminologie de la plupart des SGBDR, W1 et W2 sont dits variables de chaîne.) Une requête peut contenir un nombre arbitraire de noms de classes et substituts.