mysql union comprehensive tutorial with union examples
Ce tutoriel explique la commande MySQL UNION, ses types, Union vs Union All, et des exemples pour combiner des données de 2 requêtes ou plus:
MySQL UNION est utilisé pour combiner les résultats de plusieurs requêtes SELECT en un seul ensemble de résultats. Il est également possible d’avoir toutes les requêtes / opérations complexes dans les requêtes SELECT et d’exécuter UNION avec d’autres instructions SELECT pour obtenir un résultat combiné.
meilleur nettoyant système pour windows 10
La caractéristique par défaut d'une instruction UNION serait de supprimer les entrées ou les lignes en double de l'ensemble de lignes résultant, mais elle fournit également des moyens d'extraire les enregistrements en double à l'aide de la clause UNION ALL.
Ce que vous apprendrez:
- Comprendre UNION grâce à la théorie des ensembles
- Quel problème MySQL UNION résout
- MySQL UNION Vs UNION ALL
- Conclusion
Comprendre UNION grâce à la théorie des ensembles
Le fonctionnement de l'UNION pourrait être très bien compris à partir des principes de la théorie SET.
Supposons que nous ayons des tableaux A et B représentés par des ensembles ci-dessous et qu'ils aient des données qui se chevauchent (ou cela peut aussi être totalement indépendant) - UNION inclura la combinaison des données des deux tableaux.
Voyons un exemple où les ensembles A et B ont des éléments communs. L'UNION contiendra toutes les valeurs de l'ensemble A et B avec les valeurs en double omises.
Maintenant, que faire si les ensembles A et B sont disjoints et ne contiennent aucun élément commun? Ici aussi, l'UNION renverra le même résultat.
Discutons du scénario dans lequel les éléments se chevauchent entre les ensembles et nous voulons que les valeurs en double apparaissent également dans l'ensemble de résultats.
MySQL fournit un moyen de le faire en utilisant l'option UNION ALL comme indiqué dans l'image ci-dessous.
Quel problème MySQL UNION résout
MySQL UNION est utilisé lorsque vous avez des données similaires sur 2 tables ou plus et que vous souhaitez voir une vue combinée des données contenues dans les deux tables plutôt que d'exécuter des instructions SELECT pour des tables individuelles.
Par exemple - Supposons qu'il y ait 2 tables - Employé et Étudiant. Et vous travaillez sur une base de données de personnes qui veut juste avoir un nom, un âge et une date de naissance pour tous les employés et étudiants.
Sans UNION, vous devrez exécuter des requêtes SELECT séparées pour les deux tables, puis effectuer le calcul souhaité avec l'ensemble de résultats obtenu.
Syntaxe de MySQL UNION
Les requêtes ci-dessous renverront une UNION de 2 ou plus de 2 instructions SELECT.
SELECT {column1}, {column2} FROM {table1} UNION (ALL | DISTINCT) SELECT {column3}, {column4} FROM {table2} UNION (ALL | DISTINCT) SELECT ...
Essayons de voir les différents composants de la syntaxe
- Nous pouvons voir qu'il est possible de combiner plusieurs requêtes SELECT avec UNION pour obtenir l'ensemble de lignes résultant.
- Nom de colonne et types de données: il est important de comprendre que les colonnes que nous voulons combiner doivent avoir le même type de données ou compatible. Par exemple: si la colonne 1 est STRING, la colonne 3 doit également être STRING (ou compatible STRING).
- Les noms et positions des colonnes sont déterminés à partir de la première instruction SELECT de la requête UNION. Par exemple, dans la syntaxe ci-dessus: column1 et column2 sont nommés comme colonnes d'en-tête dans l'ensemble de résultats et les valeurs de column3 et column4 sont mappées respectivement à column1 et column2.
- Les résultats d'une requête UNION suppriment par défaut les entrées en double. Par exemple, dans ce cas, s'il y a une entrée en double qui a une correspondance exacte et a les mêmes valeurs pour colonne1 et colonne2, ces lignes seront omises de l'ensemble de résultats.
Si des doublons sont souhaités, nous pouvons utiliser l’option «ALL» avec l’UNION.
L'utilisation de DISTINCT est implicite par défaut. Veuillez noter qu'il pourrait également être spécifié explicitement pour avoir plus de lisibilité.
Voyons un exemple de requête UNION.
Supposons qu'il y ait 2 tables - employé et étudiant - chacune contenant des informations personnelles.
CREATE TABLE employee (id INT PRIMARY KEY, name VARCHAR(100), age INT, dob DATE, department VARCHAR(100)); CREATE TABLE student (id INT PRIMARY KEY, name VARCHAR(100), age INT, dob DATE, department VARCHAR(100));
Maintenant, entrez des données factices dans ces deux tableaux comme indiqué ci-dessous:
INSERT INTO employee values (1,'Darren', 32, '1988-05-20', 'ENGINEERING'), (2,'Abhishek', 28, '1992-05-20', 'ACCOUNTING'), (3,'Amit', 30, '1990-09-20', 'ENGINEERING'), (4,'Steven', 40, '1980-05-21', 'HUMAN RESOURCES'), (5,'Kartik', 20, '2000-05-12', 'TRAINEE'); ---------------------------------------------- INSERT INTO student values (1,'Akash', 22, '1998-05-17', 'COMPUTER'), (2,'Ian', 26, '1994-06-18', 'COMPUTER'), (3,'Shirley', 19, '2001-11-20', 'MECHANICAL'), (4,'Joana', 21, '1999-05-21', 'ELECTRONICS'), (5,'Kartik', 20, '2000-05-12', 'COMPUTER');
Comme vous pouvez le voir ci-dessus, nous avons intentionnellement ajouté une ligne qui a les mêmes attributs pour le nom, l'âge et la date de naissance.
Voyons maintenant comment nous pouvons combiner les données de ces 2 tableaux à l'aide des commandes UNION. Nous interrogerons le nom d'utilisateur et l'âge des deux tables.
UNION simple
Mettre en doute:
SELECT name, age FROM employee UNION SELECT name, age FROM student;
Vous verrez 9 enregistrements dans le résultat (ce qui signifie que la requête ci-dessus a omis l'entrée en double).
Production:
Nom | âge |
---|---|
Ian | 26 |
Darren | 32 |
Abhishek | 28 |
Amit | 30 |
Steven | 40 |
Kartik | vingt |
Akash | 22 |
Shirley | 19 |
Joana | vingt et un |
UNION Avec UNION ALL
L'utilisation de la clause UNION with ALL garantit que les entrées dupliquées s'affichent également.
Mettre en doute:
SELECT name, age FROM employee UNION ALL SELECT name, age FROM student;
Production:
Nom | âge |
---|---|
Ian | 26 |
Darren | 32 |
Abhishek | 28 |
Amit | 30 |
Steven | 40 |
Kartik | vingt |
Akash | 22 |
Shirley | 19 |
Joana | vingt et un |
Kartik | vingt |
UNION avec condition
Ajoutons des conditions aux instructions SELECT dans lesquelles nous voulons des données sur les employés âgés de moins de 30 ans et les étudiants âgés de moins de 25 ans.
Mettre en doute:
SELECT name, age FROM employee where age <30 UNION SELECT name, age FROM student where age < 25;
Production:
Nom | âge |
---|---|
Amit | 30 |
Abhishek | 28 |
Kartik | vingt |
Akash | 22 |
Shirley | 19 |
Joana | vingt et un |
Comme vous pouvez le voir ci-dessus, le jeu de résultats comprend le résultat combiné avec des conditions SELECT individuelles validées.
Classement des résultats UNION
Les résultats d'une requête UNION ne sont pas classés par défaut.
Afin d'imposer un ordre par une colonne existant dans l'ensemble résultant, une clause ORDER BY peut être spécifiée à la fin de la commande UNION.
Utilisons les mêmes données sur les employés / étudiants et classons les résultats UNION par ordre croissant d’âge.
SELECT name, age FROM employee UNION SELECT name, age FROM student ORDER BY age asc
Production:
Nom | âge |
---|---|
Shirley | 19 |
Kartik | vingt |
Joana | vingt et un |
Akash | 22 |
Ian | 26 |
Abhishek | 28 |
Darren | 32 |
Steven | 40 |
L'ensemble de résultats ci-dessus est trié par valeurs d'âge dans un ordre croissant. Nous pouvons également utiliser des alias de colonne pour faire référence aux colonnes de la clause ORDER BY.
Par exemple: - Une requête comme celle ci-dessous donnera également le même résultat.
SELECT name as customer_name, age as customer_age FROM employee UNION SELECT name, age FROM student ORDER BY customer_age asc
Il existe une autre façon d'utiliser la clause ORDER BY en mentionnant simplement la position de la colonne au lieu du nom de la colonne.
Par exemple: Dans la requête UNION ci-dessus, nous sélectionnons le nom et l'âge, ce qui implique que ces colonnes sont respectivement aux positions 1 et 2.
Donc, pour ORDER BY age, nous pouvons simplement spécifier la position au lieu du nom réel de la colonne.
Par conséquent, la requête ci-dessous donnera également le même résultat.
SELECT name, age FROM employee UNION SELECT name, age FROM student ORDER BY 2 asc
MySQL UNION Vs UNION ALL
MySQL fournit 2 variantes d'UNION i.e. UNION DISTINCT et UNION TOUT
Veuillez noter que le DISTINCT est implicite par défaut, même s'il n'est pas indiqué.
La principale différence entre les deux est que UNION ALL permet également de combiner et de renvoyer des lignes en double, alors que UNION renvoie simplement les lignes combinées en supprimant les doublons.
Le tableau ci-dessous explique les détails:
Paramètre | SYNDICAT | UNION TOUT |
---|---|---|
Définition | Est équivalent à UNION DISTINCT - ignore les lignes de données en double tout en renvoyant le résultat | Renvoie toutes les lignes, y compris les doublons |
Syntaxe | SELECT {columnList} FROM {table1} SYNDICAT SELECT {columnList} FROM {table2} | SELECT {columnList} FROM {table1} UNION TOUT SELECT {columnList} FROM {table2} |
Exigences en matière de données | Les données combinées doivent avoir des types de données similaires et doivent être récupérées dans le même ordre lorsqu'elles sont extraites de plusieurs tables | Identique à UNION |
Questions fréquemment posées
Q # 1) Union est-elle plus rapide que JOIN?
Répondre: UNION et JOINs sont utilisés pour pratiquement 2 buts différents.
Techniquement parlant, UNION est bien plus rapide que JOIN (en particulier pour les grands ensembles de données) car UNION concatène simplement des lignes de données à partir des instructions SELECT individuelles.
Q # 2) Qu'est-ce que l'opérateur UNION ALL?
Répondre: Similaire à UNION, l'opérateur UNION ALL renvoie également UNION entre 2 requêtes SELECT, mais la différence est qu'il contient également les lignes / entrées en double.
Q # 3) Quelle est la différence entre UNION et JOIN?
Répondre: UNION et JOIN sont tous deux utilisés pour combiner les données de 2 tables ou plus. Mais il existe une énorme différence en termes de jeu de résultats obtenu et de la manière dont les données sont extraites.
Les similitudes et les différences entre JOIN et UNION sont répertoriées dans le tableau ci-dessous:
SYNDICAT | REJOINDRE |
---|---|
Combine les données de plusieurs tables | Combine les données de plusieurs tables |
Aucune condition particulière n'est requise pour rassembler ou combiner des données | JOIN fonctionne sur une condition JOIN qui est nécessaire pour valider les données venant dans le jeu de résultats |
Les données de différentes tables sont prises comme différentes lignes de l'ensemble de résultats | Les données de différentes tables sont combinées en une seule ligne - par exemple, une ligne dans l'ensemble de résultats peut contenir 2 colonnes de table1, 3 colonnes de table 2, etc. en fonction de la condition JOIN et de la requête SELECT |
Les UNIONs sont simples et directs | JOINS nécessitent des conditions complexes et selon les besoins, plusieurs types de jointures comme INNER / OUTER, etc. peuvent être utilisés. |
Conclusion
Dans ce didacticiel, nous avons appris à utiliser MySQL UNION pour combiner des données à partir de 2 instructions SELECT ou plus.
L'instruction UNION est vraiment utile pour rassembler des données similaires à partir de grands ensembles de tables différentes, puis exécuter une analyse sur les données combinées.
La commande UNION prend également en charge une clause ALL qui permet également de récupérer les enregistrements en double.
lecture recommandée
- Qu'est-ce que MySQL et pourquoi est-il utilisé?
- Différence entre SQL et MySQL et SQL Server (avec exemples)
- Jointure interne vs jointure externe: différence exacte avec les exemples
- Tutoriel MySQL JOIN: intérieur, extérieur, croix, gauche, droite et soi
- Tutoriel MySQL Create View avec des exemples de code
- Tutoriel MySQL Create Table avec des exemples
- Didacticiel de déclaration de mise à jour MySQL - Syntaxe de requête de mise à jour et exemples
- Top 40 des meilleures questions et réponses d'entretien MySQL (Questions 2021)