PaliSkill
SQL Intermédiaire

Leçon 1 / 9 — Chapitre 4: CTE et opérateurs ensemblistes

UNION : combiner les résultats de deux requêtes

UNION combine les résultats de deux requêtes SELECT en un seul résultat — à condition qu'elles renvoient le même nombre de colonnes, de types compatibles.

SELECT nom FROM produits WHERE categorie = 'hygiene'
UNION
SELECT nom FROM produits WHERE prix >= 500;

La première requête renvoie Savon et Dentifrice (catégorie hygiène) ; la seconde renvoie Cahier, Dentifrice et Jus (prix ≥ 500). UNION combine les deux ensembles en éliminant les doublons : Dentifrice, présent dans les deux résultats, n'apparaît qu'une seule fois dans le résultat final — soit 4 noms distincts : Savon, Dentifrice, Cahier, Jus.

UNION ALL fait la même combinaison, mais sans éliminer les doublons : la même requête avec UNION ALL renverrait 5 lignes (2 + 3), Dentifrice apparaissant deux fois.

À retenir :

  • requete1 UNION requete2; combine les résultats de deux requêtes ayant le même nombre de colonnes, en éliminant les doublons.
  • UNION ALL fait la même combinaison sans éliminer les doublons — son résultat compte toujours autant de lignes que la somme des deux requêtes.
  • Une valeur présente dans les deux requêtes n'apparaît qu'une seule fois avec UNION, mais autant de fois qu'elle est trouvée avec UNION ALL.

À vous de jouer : testez la requête ci-dessus avec UNION ALL à la place de UNION, et comptez les lignes obtenues.

À vous de jouer

À faire

Voici une table produits :

produits
id | nom        | categorie   | prix | stock
1  | Cahier      | papeterie   | 500  | 40
2  | Stylo       | papeterie   | 100  | 120
3  | Savon       | hygiene     | 300  | 25
4  | Jus         | boisson     | 600  | 15
5  | Biscuits    | alimentaire | 400  | 60
6  | Dentifrice  | hygiene     | 500  | 10

Combien de lignes retourne :

SELECT nom FROM produits WHERE categorie = 'hygiene'
UNION
SELECT nom FROM produits WHERE prix >= 500;

Testez cette requête dans un bac à sable SQL en ligne (SQLite Fiddle, W3Schools "Try SQL", ou tout autre) pour vérifier le résultat avant de répondre.

💡 Un nombre.

À vous de jouer

À faire

Voici une table produits :

produits
id | nom        | categorie   | prix | stock
1  | Cahier      | papeterie   | 500  | 40
2  | Stylo       | papeterie   | 100  | 120
3  | Savon       | hygiene     | 300  | 25
4  | Jus         | boisson     | 600  | 15
5  | Biscuits    | alimentaire | 400  | 60
6  | Dentifrice  | hygiene     | 500  | 10

Combien de lignes retournerait la même requête écrite avec UNION ALL à la place de UNION ?

SELECT nom FROM produits WHERE categorie = 'hygiene'
UNION ALL
SELECT nom FROM produits WHERE prix >= 500;

Testez cette requête dans un bac à sable SQL en ligne (SQLite Fiddle, W3Schools "Try SQL", ou tout autre) pour vérifier le résultat avant de répondre.

💡 Un nombre.

À vous de jouer

À faire

Voici une table produits :

produits
id | nom        | categorie   | prix | stock
1  | Cahier      | papeterie   | 500  | 40
2  | Stylo       | papeterie   | 100  | 120
3  | Savon       | hygiene     | 300  | 25
4  | Jus         | boisson     | 600  | 15
5  | Biscuits    | alimentaire | 400  | 60
6  | Dentifrice  | hygiene     | 500  | 10

Le nom 'Dentifrice' apparaît-il plus d'une fois dans le résultat de :

SELECT nom FROM produits WHERE categorie = 'hygiene'
UNION
SELECT nom FROM produits WHERE prix >= 500;

(avec UNION, sans ALL) ? Répondez par oui ou non.

Testez cette requête dans un bac à sable SQL en ligne (SQLite Fiddle, W3Schools "Try SQL", ou tout autre) pour vérifier le résultat avant de répondre.

💡 Oui ou non.

Quitter le module