MySQL UNION – Tutoriel complet

⚡ Résumé intelligent

MySQL L'instruction UNION combine les résultats de deux requêtes SELECT ou plus en un seul ensemble de résultats consolidé. Cette explication détaille les règles de colonnes qui rendent une union valide, la différence entre UNION DISTINCT et UNION ALL, et propose des exemples concrets exécutés sur la base de données myflixdb.

  • 🔗 Objectif principal : L'opérateur UNION empile les lignes renvoyées par plusieurs requêtes SELECT en un seul ensemble de résultats, une requête en dessous de l'autre.
  • (I.e. Règle de colonne : Chaque requête SELECT doit renvoyer le même nombre de colonnes, dans le même ordre, avec des types de données compatibles.
  • 🧹 DISTINCT DE L'UNION : Les lignes en double sont supprimées et seules les lignes uniques sont renvoyées ; voici le comportement attendu MySQL s'applique par défaut.
  • 📚 UNION TOUS : Chaque ligne est renvoyée, doublons inclus, ce qui est plus rapide car aucune étape de déduplication n'est nécessaire.
  • 🏷️ Noms de colonnes : L'ensemble de résultats reprend les noms de colonnes de la première instruction SELECT ; les alias doivent donc figurer dans cette requête.
  • Utilisation typique : Consolider deux tables contenant le même type d'enregistrement, sans autoriser les lignes en double dans le résultat fusionné.

MySQL UNION Operator

Qu'est-ce qu'un syndicat ? MySQL?

UNION est une MySQL L'opérateur `SELECT` combine les résultats de plusieurs requêtes SELECT en un seul ensemble de résultats consolidé. Les lignes renvoyées par la seconde requête sont placées sous celles renvoyées par la première, ce qui produit une seule liste verticale au lieu de deux listes distinctes.

La seule condition pour que cela fonctionne est que le nombre de colonnes soit identique dans toutes les requêtes SELECT à combiner.

Supposons que nous ayons deux tables comme suit.

MySQL UNIONMySQL UNION

Ces deux tables comportent deux colonnes identiques et peuvent donc être combinées. Les exemples suivants combinent précisément ces deux tables.

Pourquoi utiliser UNION ?

Supposons qu'il y ait un défaut dans la conception de votre base de données et que vous utilisiez deux tables différentes destinées au même usage. Vous souhaitez consolider ces deux tables en une seule tout en omettant les enregistrements dupliqués.ping dans la nouvelle table. Vous pouvez utiliser UNION dans ce cas.

Cet opérateur est également utile pour les tâches de reporting quotidiennes :

  • Archidonnées vidéo et en direct : Il est possible de générer des rapports sur une table courante et une table d'archive partageant les mêmes colonnes, sans avoir à les fusionner physiquement.
  • Plusieurs sources, un seul rapport : Les membres et les films, ou les ventes de deux régions, peuvent être listés dans un seul document pour un audit rapide.
  • Contrôles de migration : Les lignes de l'ancienne table et de la nouvelle table peuvent être empilées et comparées avant que l'ancienne table ne soit supprimée.

Une union ne remplace pas une jointure. Une union ajoute des lignes sous les lignes, tandis qu'une jointure ajoute des colonnes à côté des colonnes ; cette distinction détermine l'opérateur à utiliser.

MySQL Syntaxe et règles de l'UNION

Maintenant que l'objectif est clair, examinez la structure de l'instruction et les règles appliquées par la base de données.

SELECT column1, column2 FROM `table1`
UNION [DISTINCT | ALL]
SELECT column1, column2 FROM `table2`;

Trois règles régissent chaque syndicat :

  1. Nombre de colonnes égal. Chaque projet récompensé par un Instruction SELECT doit renvoyer le même nombre de colonnes, sinon MySQL génère l'erreur 1222.
  2. Types de données compatibles dans le même ordre. La première colonne de la première requête est mise en correspondance avec la première colonne de la seconde, donc un nombre doit correspondre à un nombre et un texte doit correspondre à un texte.
  3. Les noms proviennent de la première requête. L'en-tête du jeu de résultats est tiré de la première requête SELECT, c'est pourquoi tout alias doit y figurer.

An ORDER BY LIMIT La clause placée à la fin s'applique au résultat combiné plutôt qu'à une seule de ses branches, et elle doit faire référence aux noms de colonnes produits par la première requête SELECT.

UNION DISTINCT vs UNION ALL

Les règles étant établies, la décision restante est de savoir si les lignes dupliquées doivent être conservées.

Combinaison de tables à l'aide de DISTINCT

Créons maintenant une requête UNION pour combiner les deux tables en utilisant DISTINCT.

SELECT column1, column2 FROM `table1`
UNION DISTINCT
SELECT column1, column2 FROM `table2`;

Ici, les lignes en double sont supprimées et seules les lignes uniques sont renvoyées.

Syndicat distinct

À noter: MySQL utilise la clause DISTINCT par défaut lors de l'exécution de requêtes UNION si rien n'est spécifié.

Combinaison de tableaux utilisant TOUS

Créons maintenant une requête UNION pour combiner les deux tables en utilisant ALL.

SELECT `column1`, `column2` FROM `table1`
UNION ALL
SELECT `column1`, `column2` FROM `table2`;

Les lignes en double sont incluses ici, car nous utilisons la fonction ALL.

Union-Tous

Les deux images permettent de constater facilement la différence, et le tableau ci-dessous la résume.

Point de comparaison UNION DISTINCTE UNION TOUS
Lignes en double Retiré du résultat Conservé dans le résultat
Comportement par défaut Oui, appliqué lorsqu'aucune spécification n'est fournie. Non, le mot-clé TOUS doit être écrit
Speed Plus lentement, une passe de déduplication est nécessaire Plus rapidement, les lignes sont renvoyées au fur et à mesure de leur lecture
Meilleur utilisé lorsque La liste fusionnée doit contenir des lignes uniques. Chaque ligne compte, sinon les doublons sont impossibles.

Astuce : Si les deux branches ne peuvent pas produire de lignes en double, choisissez UNION ALL. La base de données évite alors le tri et la comparaison requis par DISTINCT, ce qui représente un gain appréciable pour les grandes tables.

Exemple pratique d'utilisation MySQL Workbench

Les exemples précédents utilisaient des tables fictives. La même requête est maintenant exécutée sur la véritable base de données myflixdb, où les deux tables contiennent des enregistrements très différents.

Dans notre base de données myFlixDB, combinons les membership_number et full_names colonnes de la table des membres avec les movie_id et title Les deux requêtes renvoient deux colonnes de la table « movies ». L'union est donc valide.

Nous pouvons utiliser la requête suivante.

SELECT `membership_number`, `full_names` FROM `members`
UNION
SELECT `movie_id`, `title` FROM `movies`;

Exécuter le script ci-dessus dans MySQL établi La requête SELECT sur la base de données myflixdb donne les résultats suivants (voir ci-dessous). Notez que les en-têtes proviennent de la première requête SELECT, même si les lignes suivantes correspondent à des enregistrements de films.

membership_number full_names
1 Janet Jones
2 Janet Smith Jones
3 Robert Phil
4 Gloria Williams
5 Leonard Hofstadter
6 Sheldon Cooper
7 Rajesh Koothrappali
8 Leslie Winkle
9 Howard Wolowitz
16 67% Guilty
6 Angels and Demons
4 Code Name Black
5 Daddy's Little Girls
7 Davinci Code
2 Forgetting Sarah Marshal
9 Honey mooners
19 movie 3
1 Pirates of the Caribean 4
18 sample movie
17 The Great Dictator
3 X-Men

FAQ

L'opérateur UNION empile les lignes d'une requête sous une autre, ce qui augmente la hauteur du résultat. INSCRIPTION Cette fonction fusionne les lignes similaires et place leurs colonnes côte à côte, ce qui élargit le résultat. Utilisez UNION pour les lignes similaires et JOIN pour les tables liées.

Placez un seul COMMANDÉ PAR La clause LIMIT placée après la dernière instruction SELECT trie le résultat combiné et doit utiliser les noms de colonnes générés par la première instruction SELECT. Une clause LIMIT placée à cet endroit se comporte de la même manière.

L'erreur 1222 se produit lorsque les branches de la requête SELECT renvoient un nombre de colonnes différent. Comptez les colonnes dans chaque branche et ajoutez une valeur littérale ou NULL à la branche la plus courte afin que les deux branches soient dans le même ordre.

Oui. Les assistants de conversion de texte en SQL, y compris ceux intégrés à MySQL WorkbenchGénérez des instructions UNION à partir d'une requête simple. Vérifiez vous-même l'ordre des colonnes, car un modèle peut aligner des colonnes qui se ressemblent simplement.

Un assistant peut suggérer UNION ALL lorsque les doublons sont impossibles, ce qui permet généralement de gagner du temps. La décision dépend toutefois des données ; il est donc important de vérifier que les branches ne se chevauchent pas avant de supprimer l’étape de déduplication.

Résumez cet article avec :