MySQL UNION – Tutoriel complet
Qu'est-ce qu'un syndicat ?
Les unions combinent les résultats de plusieurs requêtes SELECT dans un jeu de résultats consolidé.
La seule condition requise pour que cela fonctionne est que le nombre de colonnes soit le même pour toutes les requêtes SELECT qui doivent être combinées.
Supposons que nous ayons deux tableaux comme suit
Créons maintenant une requête UNION pour combiner les deux tables à l'aide de 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.
Attention: MySQL utilise la clause DISTINCT par défaut lors de l'exécution de requêtes UNION si rien n'est spécifié.
Créons maintenant une requête UNION pour combiner les deux tables en utilisant ALL
SELECT `column1`,` column1` FROM `table1` UNION ALL SELECT ` column1`,` column1` FROM `table2`;
Ici, les lignes en double sont incluses et puisque nous utilisons TOUS.
Pourquoi utiliser les syndicats ?
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 objectif. Vous souhaitez consolider ces deux tables en une seule tout en évitant que les enregistrements en double ne s'insinuent dans la nouvelle table. Vous pouvez utiliser UNION dans de tels cas.
Résumé
- La commande UNION est utilisée pour combiner plusieurs résultats de requête SELECT en une seule requête contenant les lignes de toutes les requêtes de sélection.
- Le nombre de colonnes et de types de données dans le Instructions SELECT doit être le même pour que la commande UNION fonctionne.
- La clause DISTINCT est utilisée pour éliminer les valeurs en double du jeu de résultats de la requête UNION. MySQL utilise la clause DISTINCT par défaut lors de l'exécution de requêtes UNION si rien n'est spécifié.
- La clause ALL est utilisée pour renvoyer toutes les lignes, même les lignes en double, dans la requête UNION.
Exemples pratiques utilisant MySQL établi
Dans notre myFlixDB, combinons
member_number et full_names de la table Members
avec
movie_id et titre de la table des films
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 contre myflixdb nous donne les résultats suivants présentés ci-dessous.
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 |