Retour à la liste des articles Articles
6 minutes de lecture

Introduction aux opérateurs d'ensemble SQL : Union, Union Tout, Moins et Intersection

Avez-vous déjà entendu des termes tels que union et intersection en SQL ? Ce sont des exemples d'opérateurs d'ensemble, et ils sont très utiles lorsque vous devez combiner des informations provenant de plusieurs tables ou requêtes. Dans cet article, nous allons les examiner de plus près.

Les requêtes SQL nous permettent de sélectionner les éléments les plus importants dans de grandes quantités d'informations. Bien entendu, il ne faut pas s'attendre à ce que toutes les données nécessaires soient stockées dans une seule table. Imaginons que nous voulions présenter tous les aspects d'un groupe de données clés dans un seul tableau de résultats (par exemple, créer un rapport contenant les noms de tous les clients servis par tous les services d'une grande entreprise). Ces enregistrements peuvent se trouver dans de nombreuses tables différentes, et nous avons donc besoin d'opérateurs d'ensemble tels que l'union et l'intersection en SQL pour les fusionner en une seule table ou pour trouver des éléments communs.

Lors de telles opérations, nous prenons deux ou plusieurs résultats des instructions SELECT et créons une nouvelle table avec les données recueillies. Pour ce faire, nous utilisons un opérateur set SQL. Les opérateurs tels que MINUS, UNION ou INTERSECT sont largement utilisés dans les requêtes SQL. Voyons comment ils fonctionnent.

Les tables de l'échantillon

Supposons que nous ayons une base de données très simple qui stocke des informations sur les livres et les films. Elle ne comporte que deux tables, BOOKS et MOVIESqui contiennent les titres des livres et des films (respectivement) et un numéro d'identification. En regardant ces tables, vous remarquerez qu'un seul titre apparaît dans les deux :

Table: BOOKS
ID Title
1 The Witcher
2 Harry Potter
3 Nineteen Eighty-Four
4 The Great Gatsby

Table: MOVIES
ID Title
1 Iron Man
2 Harry Potter
3 Dr Strange
4 Matrix

L'opérateur d'ensemble UNION

Et si nous voulions créer une seule table à partir de tout le contenu des tables BOOKS et MOVIES ? C'est le moment idéal pour utiliser l'opérateur d'ensemble UNION.

UNION fusionne les résultats de deux instructions SELECT. Important : les instructions UNION ne renvoient que des valeurs UNIQUES. Vous trouverez ci-dessous un diagramme de Venn représentant cette opération et le code qui la réalise :

SELECT * FROM BOOKS
UNION
SELECT * FROM MOVIES

Voici le résultat :

ID Title
1 The Witcher
2 Harry Potter
3 Nineteen Eighty-Four
4 The Great Gatsby
5 Iron Man
6 Dr Strange
7 Matrix

Tous les titres de livres et de films sont maintenant dans une seule table. Notez que "Harry Potter" - un élément qui apparaît dans les deux tables - n'est affiché qu'une seule fois dans les résultats. Comme nous l'avons mentionné précédemment, l'opérateur de jeu UNION ne renvoie pas de valeurs en double.

L'opérateur set UNION ALL

Vous avez probablement deviné que UNION ALL est très similaire à UNION, à une exception près : UNION ALL renvoie toutes les données de toutes les tables, qu'il s'agisse de doublons ou non. Effectuons la même opération que dans l'exemple UNION et voyons ce que nous obtenons :

SELECT * FROM BOOKS
UNION ALL
SELECT * FROM MOVIES

Résultat :

ID Title
1 The Witcher
2 Harry Potter
3 Nineteen Eighty-Four
4 The Great Gatsby
5 Iron Man
6 Harry Potter
7 Dr Strange
8 Matrix

Cette fois, le petit assistant apparaît deux fois dans le tableau des résultats.

Nous connaissons maintenant la principale différence entre ces deux opérateurs. Mais quand devons-nous utiliser UNION et quand UNION ALL? Tout d'abord, sachez qu'il y a une énorme différence d'efficacité entre eux. Supposons que nous devions fusionner deux résultats de requête contenant chacun 10 000 éléments. UNION éliminera tous les doublons et triera tous les éléments de la table de résultats. Ce processus de tri prend beaucoup de temps et fonctionne avec un grand nombre d'éléments.

En somme, UNION peut être quatre fois plus lent que UNION ALL, qui n'élimine pas les doublons et ne trie pas les données. Si nous ne nous soucions pas des doublons et que nous voulons travailler rapidement, UNION ALL sera la solution parfaite. Mais si nous savons qu'avoir des éléments uniques est notre objectif principal, alors UNION sera beaucoup plus utile.

L'opérateur d'ensemble MINUS

L'opérateur MINUS est un peu différent. Disons que nous voulons voir uniquement les titres de livres qui ne sont pas aussi des titres de films. Nous devons "minorer" tout ce qui se trouve dans la table BOOKS qui se trouve également dans la table MOVIES tableau. L'opérateur d'ensemble MINUS est conçu pour ce type de tâche.

SELECT * FROM BOOKS
MINUS
SELECT * FROM MOVIES

Le résultat :

ID Title
1 The Witcher
2 Nineteen Eighty-Four
3 The Great Gatsby

Maintenant, "Harry Potter" n'apparaît pas dans le tableau des résultats ; c'est le titre d'un livre et d'un film. Grâce à l'opérateur d'ensemble MINUS, nous pouvons voir uniquement les titres qui apparaissent dans le premier tableau et qui ne sont pas présents dans le second.

À propos, certaines bases de données utilisent le mot clé EXCEPT au lieu de MINUS. Ne vous inquiétez pas, la fonction et les résultats sont exactement les mêmes.

L'opérateur d'ensemble INTERSECT

OK, nous savons donc comment ajouter et soustraire certains éléments à l'aide des opérateurs UNION et MINUS. Mais que devons-nous faire si nous avons besoin de savoir ce que deux requêtes ont en commun ?

C'est le rôle principal de l'opérateur INTERSECT. Voyons comment il fonctionne.

SELECT * FROM BOOKS
INTERSECT
SELECT * FROM MOVIES

Et le résultat :

ID Title
1 Harry Potter

Vous savez maintenant que "Harry Potter" (et seulement "Harry Potter") est présent dans les deux tables. Il est donc le seul élément du tableau de résultats.

Moins, Union, Intersection en SQL : Conseils pratiques

Il y a quelques points à retenir au sujet de moins, union et intersection en SQL :

  1. Si les noms de colonnes ou les alias comparés sont différents, la colonne de résultat sera appelée après la colonne de la première requête SELECT.
  2. Vous pouvez utiliser soit les résultats de la requête, soit les tableaux avec les opérateurs d'ensemble.
  3. Les colonnes comparées doivent être de même type et de même nombre.
  4. Le tableau de résultats aura toujours plus de colonnes de haute précision.

Les opérateurs MINUS, UNION et INTERSECT trient toujours les résultats renvoyés ; UNION ALL ne le fait pas. Si nous voulons un certain ordre ou type de tri, nous pouvons toujours utiliser un ORDER BY à la fin de la requête. Mais gardez à l'esprit que cela triera l'ensemble de la requête ! Nous ne pouvons pas utiliser ORDER BY avant un opérateur SQL set ou essayer de trier chaque SELECT séparément.

Nous devons également mentionner que nous pouvons utiliser des opérateurs de set tels que moins, union et intersection en SQL dans tous les types de requêtes. Nous n'avons pas besoin de sélectionner tous les enregistrements des deux tables ; nous pouvons travailler sur les résultats de requêtes existantes.

C'est incroyable ce que l'on peut faire avec les opérateurs d'ensemble comme moins, union et intersection en SQL. Grâce à eux, nous pouvons facilement trouver et présenter des données intéressantes. Acquérir une expérience pratique de l'utilisation des opérateurs d'ensemble SQL et d'autres fonctions avec le cours LearnSQL.fr SQL pour les débutants . Commencez un nouveau voyage de données passionnant de la bonne manière !