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 ALLfait 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 avecUNION 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
À faireVoici 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
À faireVoici 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
À faireVoici 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.