Menu
Coddy logo textTech

Union

Fait partie de la section Les fondamentaux du Journey SQL de Coddy — leçon 48 sur 72.

Les unions sont différentes des jointures. Jointures utilisent des conditions pour combiner des tables mais unions ajoutent simplement deux tables l'une sur l'autre. Pour utiliser UNION nous écrirons :

SELECT col1, col2, ... FROM table1
UNION
SELECT col1, col2, ... FROM table2

Les deux selects doivent respecter les règles suivantes :

  • Le nombre de champs doit être égal
  • L'ordre est important
  • Les colonnes à la même position doivent correspondre aux types de données

Par exemple, supposons que nous ayons les tables suivantes :

germany_people

idname
1Lena
2Leonie

england_people

idname
1George
2Lena

Problème : Nous voulons créer un grand tableau de tous les noms que nous avons.

SELECT name from germany_people
UNION
SELECT name from england_people

Résultat :

nom
Lena
Leonie
George

UNION ne retourne que les valeurs distinctes tandis que UNION ALL retourne tous les enregistrements tels quels :

SELECT name from germany_people
UNION ALL
SELECT name from england_people

Résultat :

nom
Lena
Leonie
George
Lena

Vous pouvez également combiner UNION ALL avec GROUP BY, les fonctions d'agrégation, et ORDER BY en enveloppant l'union dans une sous-requête. Par exemple, pour compter combien de fois chaque nom apparaît dans les deux tables :

SELECT name, COUNT(*) AS total
FROM (
    SELECT name FROM germany_people
    UNION ALL
    SELECT name FROM england_people
) AS all_people
GROUP BY name
ORDER BY total DESC

Résultat :

nomtotal
Lena2
Leonie1
George1

Ici, UNION ALL conserve toutes les lignes (y compris les doublons) de sorte que COUNT reflète le nombre réel d'occurrences. La requête externe regroupe ensuite et trie le résultat combiné.

challenge icon

Défi

Facile

Tables et colonnes disponibles :

  • <strong>sales_2009</strong> : <strong>product_id</strong>, <strong>quantity_sold</strong>
  • <strong>sales_2010</strong> : <strong>product_id</strong>, <strong>quantity_sold</strong>
  • <strong>sales_2011</strong> : <strong>product_id</strong>, <strong>quantity_sold</strong>

Il y a 3 tables de ventes.

Trouvez la somme des ventes pour chaque produit de toutes les tables ensemble.

Le résultat doit inclure le product_id et les ventes totales.

Nommez cette colonne total_sales.

Triez les résultats par les ventes totales en ordre décroissant.

Aide-mémoire

UNION combine les tables en les empilant verticalement. Contrairement aux jointures, les unions n'utilisent pas de conditions - elles ajoutent simplement les tables les unes sur les autres.

Syntaxe de base de UNION :

SELECT col1, col2, ... FROM table1
UNION
SELECT col1, col2, ... FROM table2

Règles de UNION :

  • Le nombre de champs doit être égal
  • L'ordre est important
  • Les colonnes à la même position doivent avoir des types de données correspondants

UNION vs UNION ALL :

  • UNION ne retourne que les valeurs distinctes
  • UNION ALL retourne tous les enregistrements y compris les doublons
SELECT name FROM germany_people
UNION
SELECT name FROM england_people
SELECT name FROM germany_people
UNION ALL
SELECT name FROM england_people

Vous pouvez utiliser UNION ALL dans une sous-requête et ensuite appliquer GROUP BY, ORDER BY, et des fonctions d'agrégation sur le résultat combiné :

SELECT name, COUNT(*) AS total
FROM (
  SELECT name FROM germany_people
  UNION ALL
  SELECT name FROM england_people
) AS all_people
GROUP BY name
ORDER BY total DESC

Cela compte combien de fois chaque nom apparaît dans les deux tables, y compris les doublons.

Essayez vous-même

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Les fondamentaux