Retour à la liste des articles Articles
6 minutes de lecture

UNION vs UNION ALL en SQL : Quelle est la différence ?

La différence ?

UNION et UNION ALL sont tous deux utilisés pour extraire des enregistrements de plusieurs tables. Cet article détaillera les différences entre les deux, vous permettant de faire le meilleur choix pour chaque scénario unique.

Vous pouvez utiliser les commandes SQL UNION et UNION ALL pour obtenir des données de plusieurs tables dans votre base de données. Il s'agit d'un cas d'utilisation courant, étant donné que la plupart des bases de données comportent de nombreuses tables. Les commandes UNION et UNION ALL sont connues comme des opérateurs de jeu. En SQL, les opérateurs set combinent les résultats de deux ou plusieurs requêtes en un seul résultat. Vous pouvez en savoir plus sur les opérateurs de set dans cet article.

Si l'on compare UNION et UNION ALL, il existe une différence majeure :

  • UNION renvoie uniquement les enregistrements uniques
  • UNION ALL renvoie tous les enregistrements, y compris les doublons.

Si vous pensez que vous auriez besoin d'un cours complet et bien structuré couvrant les bases du SQL, envisagez ce cours SQL pour les débutants de LearnSQL.

UNION vs. UNION ALL : Syntaxe

La syntaxe des deux variantes de UNION est très similaire. Examinons-les individuellement, en commençant par UNION.

Syntaxe de UNION

Rappelez-vous que UNION combine l'ensemble des résultats de deux ou plusieurs instructions SELECT, en ne montrant que des valeurs distinctes.

La syntaxe SQL ci-dessous montre un UNION se produisant entre deux tables différentes ; les colonnes des deux déclarations SELECT sont de types de données identiques ou correspondants.

La clause WHERE indiquée est une inclusion facultative :

	SELECT column_1, column_2
	FROM table_1
	[WHERE condition]

	UNION

	SELECT column_1, column_2
	FROM table_2
	[WHERE condition]

Syntaxe SQL UNION ALL

Rappelez-vous que UNION ALL combine les résultats de deux ou plusieurs instructions SELECT, en affichant toutes les valeurs, y compris les doublons s'ils existent.

La syntaxe SQL ci-dessous montre une UNION ALL se produisant entre deux tables différentes. Une fois encore, les colonnes de SELECT sont de types de données identiques ou correspondants et la clause WHERE est facultative :

	SELECT column_1, column_2
	FROM table_1
	[WHERE condition]

	UNION ALL

	SELECT column_1, column_2
	FROM table_2
	[WHERE condition]

Explication des expressions SQL UNION et UNION ALL

Il existe plusieurs règles d'utilisation pour UNION et UNION ALL. Le non-respect de ces règles entraînera des messages d'erreur :

  • Le nombre de colonnes utilisées dans votre première requête et votre seconde requête doit être le même et les types de données (par exemple INT, VARCHAR, etc.) doivent correspondre.
  • Les noms des colonnes incluses dans les deux requêtes peuvent différer ; lorsque c'est le cas, le jeu de données résultant affichera les noms des colonnes de la première requête.
  • Lorsque vous utilisez des alias SQL en conjonction avec UNION et UNION ALL, vous ne devez inclure l'alias que dans la première requête. L'inclure dans la deuxième requête ne provoquera pas d'erreur, mais n'aura pas non plus d'impact sur le résultat.

Vous pouvez utiliser UNION et UNION ALL pour combiner des tables qui n'ont aucune colonne en commun. Ce cas d'utilisation est couvert dans cet article sur la façon de joindre des tables sans colonne commune.

SQL UNION vs UNION ALL : Exemple

Prenons un exemple pratique pour mieux comprendre la différence entre UNION et UNION ALL. Imaginons que nous ayons une base de données contenant des informations sur plusieurs clubs. Chaque table indique les membres de ce club et l'endroit où ils se rendent. Chaque club peut avoir plusieurs branches ou lieux différents où il se réunit. La première table concerne le book_club. Elle contient le nom des membres du club et le site location qu'ils fréquentent :

namelocation
JohnFair Street
MaryFair Street
PaulWest Street

De même, le tableau rowing_club contient le nom des membres du club et le site location qu'ils fréquentent.

namelocation
MaryFair Street
SamanthaFair Street
PaulWest Street

Maintenant que nous avons nos tables, écrivons notre requête SQL. En utilisant la syntaxe UNION, nous obtenons la requête suivante :

SELECT name, location 
FROM book_club

UNION

SELECT name, location 
FROM rowing_club

UNION effectue d'abord une opération de tri et élimine les enregistrements qui sont en double dans toutes les colonnes avant de retourner finalement l'ensemble de données combiné. Vous pouvez voir que nous utilisons des colonnes du même type de données et SELECT le même nombre de colonnes dans chaque requête. Cela respecte les règles d'utilisation de UNION et devrait s'exécuter sans erreur.

L'exécution de cette requête produit le résultat suivant :

namelocation
JohnFair Street
MaryFair Street
PaulWest Street
SamanthaFair Street

Nous y sommes ! Tous les membres des deux clubs !

Maintenant, modifions la requête et changeons UNION en UNION ALL:

SELECT name, location 
FROM book_club

UNION ALL

SELECT name, location 
FROM rowing_club

Avec UNION ALL en place, nous pouvons nous attendre à ce que les résultats incluent des doublons. Exécutons cette nouvelle requête et observons les résultats :

namelocation
JohnFair Street
MaryFair Street
PaulWest Street
MaryFair Street
SamanthaFair Street
PaulWest Street

Pouvez-vous repérer tous les enregistrements en double ? Comparez ce résultat à nos deux tables originales. Vous pouvez voir que chaque ligne a été incluse.

UNION ou UNION ALL - Que choisir ?

Maintenant que vous savez comment utiliser UNION et UNION ALL, vous vous demandez probablement quelle est la meilleure solution pour votre situation. Une chose à prendre en compte est le fait que UNION supprime les enregistrements en double, ce qui peut avoir un impact sur les performances de votre requête.

Si vous vous demandez quelle variante utiliser, n'oubliez pas :

  • L'utilisation de UNION exécute en fait une SELECT DISTINCT sur le jeu de résultats.
  • Si vous savez que tous les enregistrements renvoyés par UNION seront uniques, utilisez UNION ALL; ce sera plus rapide. Ceci est particulièrement important pour les grands ensembles de données.

Rédiger des requêtes complexes avec UNION et UNION ALL

Nous avons couvert les différences entre UNION et UNION ALL et les raisons pour lesquelles vous pourriez choisir l'une ou l'autre. Grâce à ces informations, vous pouvez maintenant extraire des données de deux tables ou plus dans votre base de données. Les sites UNION et UNION ALL jouent tous deux un rôle important dans l'utilisation des requêtes récursives, un sujet plus avancé qui est traité en détail dans notre cours Requêtes récursives .

N'oubliez pas d'ajouter cette page à vos favoris afin de pouvoir accéder facilement aux explications et aux exemples concernant UNION et UNION ALL. Pensez également à enregistrer cette page de notre livre de recettes SQL, qui explique comment combiner les résultats de deux requêtes en SQL. Ces connaissances peuvent faire passer vos requêtes SQL au niveau supérieur et vous aider à gérer des cas d'utilisation complexes avec facilité !