TOP

SQL-Leçon 12. Requêtes combinées (UNION)

La plupart des requêtes SQL utilisent une seule instruction qui renvoie les données d'une ou plusieurs tables. SQL vous permet également d'exécuter plusieurs requêtes distinctes en même temps et d'afficher le résultat sous la forme d'un seul ensemble de données. De telles requêtes combinées sont généralement appelées jointures ou requêtes composées.


1. Utilisation de l'opérateur UNION

Les requêtes SQL sont combinées à l'aide de l'opérateur UNION. Pour ce faire, vous devez spécifier chaque requête SELECT et placer le mot-clé UNION entre elles. Il n'y a pas de limite au nombre d'utilisations de l'opérateur UNION dans une requête générale. Dans la section précédente, nous avons noté que MS Access n'a pas la capacité de créer une union externe complète, nous verrons maintenant comment cela peut être réalisé via l'opérateur UNION.

Run SQLSELECT *
FROM Sumproduct 
LEFT JOIN Sellers2 
ON Sumproduct.City = Sellers2.City
UNION
SELECT * 
FROM Sumproduct 
RIGHT JOIN Sellers2 
ON Sumproduct.City = Sellers2.City

Nous voyons que la requête a affiché à la fois toutes les colonnes de la première table et de la seconde, que tous les enregistrements aient ou non des équivalents dans une autre table.

Il convient également de noter que dans de nombreux cas, au lieu de UNION, nous pouvons utiliser la clause WHERE avec de nombreuses conditions et obtenir un résultat similaire. Cependant, grâce à UNION, les enregistrements semblent plus concis et plus clairs.

Il est également nécessaire de suivre certaines règles lors de l'écriture de requêtes combinées :

  • la requête UNION doit inclure au moins deux opérateurs SELECT séparés par le mot-clé UNION (c'est-à-dire que si quatre opérateurs SELECT sont utilisés dans la requête, alors il doit y avoir trois mots-clés UNION) ;
  • chaque requête de l'opérateur UNION doit avoir les mêmes colonnes, expressions ou fonctions statistiques, qui doivent de plus être répertoriées dans le même ordre ;
  • les types de données des colonnes doivent être compatibles. Ils ne doivent pas nécessairement être du même type, mais ils doivent avoir un type similaire pour que le SGBD puisse les convertir sans ambiguïté (par exemple, il peut s'agir de types de données numériques différents ou de types de date différents).
  • 2. Inclure ou exclure les lignes répétées

    Une requête avec UNION supprime automatiquement toutes les lignes en double du jeu de résultats de la requête (en d'autres termes, se comporte comme une clause WHERE avec plusieurs conditions dans une seule instruction SELECT). C'est le comportement par défaut de l'opérateur UNION, mais nous pouvons le modifier si nous le souhaitons. Pour cela, nous devons utiliser l'opérateur UNION ALL au lieu de UNION.

    3. Tri des résultats des requêtes combinées

    Les résultats de l'instruction SELECT sont triés à l'aide de l'instruction ORDER BY. Lors de la combinaison de requêtes à l'aide de UNION, une seule clause ORDER BY peut être utilisée et elle doit être placée dans la dernière instruction SELECT. En effet, en pratique, cela n’a pas beaucoup de sens de trier une partie des résultats dans un ordre et l’autre partie dans un autre. Par conséquent, plusieurs phrases ORDER BY ne sont pas autorisées.