UNION ou UNION ALL
La différence de déduplication et de performances, et pourquoi UNION ALL est généralement attendu
UNION ou UNION ALL est une leçon SQL Interview Prep gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Interview Prep, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Interview Prep comprend 4 leçons au total.
Pourquoi les intervieweurs posent des questions sur UNION
Les opérations ensemblistes empilent verticalement un ensemble de résultats au-dessus d'un autre. UNION et UNION ALL sont les premiers opérateurs ensemblistes auxquels les intervieweurs pensent, car la différence entre eux tient en une ligne et révèle si vous comprenez le coût.
La question est presque toujours formulée ainsi : « Quelle est la différence entre UNION et UNION ALL, et lequel devez-vous utiliser ? » Une bonne réponse mentionne d'un seul trait la déduplication, le tri et les performances.
Ce que fait UNION
UNION combine les lignes de deux requêtes en un seul ensemble de résultats, puis supprime les lignes en double. Deux lignes ne sont en double que si chaque colonne correspond.
Pour supprimer les doublons, le moteur doit trier ou hacher toutes les lignes combinées, ce qui représente un véritable travail. UNION renvoie un ensemble au sens mathématique : sans répétitions.
SELECT city FROM customers
UNION
SELECT city FROM suppliers;Ce que fait UNION ALL
UNION ALL concatène les deux ensembles de résultats et conserve chaque ligne, y compris les doublons. Aucune déduplication n'est effectuée, donc aucun tri ou hachage n'est nécessaire à cette fin.
Comme cette étape est ignorée, UNION ALL est presque toujours plus rapide et constitue le bon choix lorsque vous savez que les lignes ne peuvent pas se chevaucher ou lorsque les doublons sont souhaités.
SELECT city FROM customers
UNION ALL
SELECT city FROM suppliers;La différence de rapidité
À retenir pour l'entretien : UNION ALL coûte moins cher, car il n'effectue jamais de déduplication. UNION doit comparer toutes les lignes combinées entre elles pour supprimer les répétitions.
UNION= UNION ALL + une étape DISTINCT implicite.- Sur de grands ensembles de résultats, cette étape DISTINCT peut dominer le coût de la requête.
Si vous n'avez pas besoin de supprimer les doublons, choisir UNION gaspille du CPU et de la mémoire.
Exemple détaillé avec des doublons
Supposons que les deux requêtes puissent renvoyer la ligne 'Paris'. Avec UNION, vous obtenez un seul Paris. Avec UNION ALL, vous obtenez Paris deux fois.
Les intervieweurs aiment vous demander de prévoir le nombre de lignes. Imaginez toujours d'abord la concaténation brute, puis demandez-vous : l'opérateur élimine-t-il les répétitions ?
-- customers.city: Paris, Lyon
-- suppliers.city: Paris, Nice
-- UNION -> Paris, Lyon, Nice (3 rows)
-- UNION ALL -> Paris, Lyon, Paris, Nice (4 rows)Les doublons se définissent sur toutes les colonnes
Un piège courant : deux lignes ne sont en double que si toutes les colonnes sélectionnées sont égales. Ajoutez une colonne différente et les lignes ne sont plus en double, UNION les conservera donc toutes les deux.
C'est pourquoi SELECT id, city renvoie souvent plus de lignes que SELECT city avec UNION, même sur les mêmes tables.
SELECT id, city FROM customers
UNION
SELECT id, city FROM suppliers;
-- ids differ -> few or no duplicates removedTrier le résultat combiné
Vous ne pouvez pas placer ORDER BY sur chacune des branches ; il s'applique à l'ensemble du résultat combiné et doit apparaître une seule fois, tout à la fin.
Un intervieweur peut demander où placer ORDER BY. La réponse : un seul ORDER BY après la dernière requête, faisant référence aux colonnes de sortie par leur nom ou leur position.
SELECT city FROM customers
UNION ALL
SELECT city FROM suppliers
ORDER BY city;Les noms de colonnes proviennent de la première requête
Lorsque vous faites référence aux colonnes dans le ORDER BY final, utilisez les noms (ou alias) de la première requête SELECT. Les noms de colonnes de la deuxième requête sont ignorés pour l'étiquetage de la sortie.
Cela est important lorsque les branches nomment leurs colonnes différemment. Donnez un alias à la première branche pour contrôler l'en-tête de sortie.
SELECT city AS location FROM customers
UNION ALL
SELECT town FROM suppliers
ORDER BY location;Quand UNION est le bon choix
Utilisez UNION uniquement lorsque des lignes qui se chevauchent sont réellement possibles et que vous voulez obtenir chaque ligne distincte une seule fois. Exemples : fusionner deux listes de contacts où une même personne peut apparaître dans les deux, ou créer une liste dédoublonnée de valeurs distinctes provenant de plusieurs sources.
Si vous pouvez garantir que les sources sont disjointes, UNION ALL donne le même résultat plus rapidement.
SELECT email FROM web_signups
UNION
SELECT email FROM store_signups;
-- one row per distinct email across bothQuand UNION ALL est le bon choix
Utilisez UNION ALL lorsque les doublons sont impossibles, lorsqu'ils sont significatifs ou lorsque vous effectuerez ensuite une agrégation. Un cas classique consiste à empiler des tables de partition mensuelles qui ne contiennent aucune ligne commune.
Conseil pour les entretiens : indiquez que UNION ALL est la valeur par défaut et que vous ne passez à UNION que lorsque la déduplication est réellement nécessaire.
SELECT * FROM sales_2023
UNION ALL
SELECT * FROM sales_2024;Assembler le tout
Une réponse soignée en entretien peut être formulée ainsi : "UNION supprime les lignes en double, ce qui impose un tri ou un hachage ; UNION ALL conserve tout et est plus rapide. Les deux exigent le même nombre de colonnes et des types compatibles, et tout ORDER BY n'apparaît qu'une seule fois à la fin. Par défaut, j'utilise UNION ALL, sauf si une déduplication est nécessaire."
Cette seule phrase montre à la fois que vous maîtrisez la correction et que vous êtes attentif aux performances.
Vérification rapide
Testez votre compréhension de la distinction entre UNION et UNION ALL.
Récapitulatif
Points essentiels :
UNION= combiner et supprimer les lignes en double (DISTINCT implicite, coût supplémentaire).UNION ALL= combiner et tout conserver, plus rapide, choix par défaut raisonnable.- Les doublons exigent que toutes les colonnes correspondent.
- Un seul
ORDER BYapparaît à la toute fin et utilise les noms de colonnes de la première requête.
Utilisez UNION ALL par défaut ; passez à UNION uniquement lorsque la déduplication est réellement nécessaire.
Questions Fréquemment Posées
La leçon « UNION ou UNION ALL » est-elle gratuite ?
Oui — le texte complet de « UNION ou UNION ALL » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Interview Prep, passe à CoddyKit PRO. Le cours SQL Interview Prep comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « UNION ou UNION ALL » ?
La différence de déduplication et de performances, et pourquoi UNION ALL est généralement attendu Tu pratiques SQL Interview Prep avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer SQL Interview Prep ?
Aucune expérience préalable n'est requise. SQL Interview Prep sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « UNION ou UNION ALL » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon SQL Interview Prep ?
Oui. Chaque leçon SQL Interview Prep inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- UNION ou UNION ALL
- Nombre de colonnes et compatibilité des types
- INTERSECT et EXCEPT pour comparer
- Émuler les opérations ensemblistes avec des jointures