Qu'est-ce qu'un syndicat?
Les syndicats combinent les résultats de plusieurs requêtes SELECT dans un ensemble de résultats consolidé.
La seule condition requise pour que cela fonctionne est que le nombre de colonnes doit être le même pour toutes les requêtes SELECT qui doivent être combinées.
Supposons que nous ayons deux tables comme suit
Créons maintenant une requête UNION pour combiner les deux tables à l'aide de DISTINCT
SELECT column1, column2 FROM `table1`UNION DISTINCTSELECT column1,column2 FROM `table2`;
Ici, les lignes en double sont supprimées et seules les lignes uniques sont renvoyées.
Remarque: 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 ALLSELECT ` 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 une faille dans la conception de votre base de données et que vous utilisez deux tables différentes destinées au même but. Vous souhaitez consolider ces deux tables en une seule tout en omettant les enregistrements en double de ramper 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 les 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 de l'ensemble 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 en double, dans la requête UNION.
Exemples pratiques utilisant MySQL Workbench
Dans notre myFlixDB combinons
Membership_number et full_names de la table Members
avec
movie_id et title du tableau des films
Nous pouvons utiliser la requête suivante
SELECT `membership_number`,`full_names` FROM `members`UNIONSELECT `movie_id`,`title` FROM `movies`;
L'exécution du script ci-dessus dans MySQL workbench sur myflixdb nous donne les résultats suivants indiqué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 |