7.4. Combiner des requêtes

Les résultats de deux requêtes peuvent être combinés en utilisant les opérations ensemblistes : union, intersection et différence. La syntaxe est

requete1 UNION [ALL]
requete2
requete1 INTERSECT [ALL]
requete2
requete1 EXCEPT [ALL]
requete2

requete1 et requete2 sont des requêtes pouvant utiliser toutes les fonctionnalités discutées jusqu'ici. Les opérations ensemblistes peuvent également être combinées et chaînées. Ainsi

requete1 UNION requete2 UNION requete3

qui signifie réellement

(requete1 UNION requete2) UNION requete3

UNION ajoute simplement le résultat de requete2 au résultat de requete1 (il n'y a cependant aucune garantie sur l'ordre effectif de retour des lignes). De plus, toutes les lignes dupliquées sont éliminées, au sens de DISTINCT, à moins que UNION ALL ne soit utilisé.

INTERSECT renvoie toutes les lignes qui sont à la fois dans le résultat de requete1 et dans le résultat de requete2. Les lignes dupliquées sont éliminées, sauf si INTERSECT ALL est utilisé.

EXCEPT renvoie toutes les lignes qui sont dans le résultat de requete1 mais pas dans celui de requete2. (On parle parfois de différence entre deux requêtes.) Là aussi, les lignes dupliquées sont éliminées, sauf si EXCEPT ALL est utilisé.

Pour calculer l'union, l'intersection ou la différence de deux requêtes, il est impératif que les deux requêtes soient << compatibles pour une union >>. Cela signifie qu'elles doivent renvoyer le même nombre de colonnes et que les colonnes correspondantes doivent avoir des types de données compatibles, comme cela est décrit dans Section 10.5.