L'union permet d'avoir les résultats de 2 requêtes dans une seule liste.
Dans l'exemple suivant, nous allons lister tous les clients ET tous les mécaniciens.
Schématiquement, l'union représente tout le contenu du cercle rouge (première requête) suivi par tout le contenu du cercle bleu (deuxième requête). Les données communes aux deux requêtes ne sont pas dédoublées. Dans notre exemple, le cercle rouge représente les clients et le cercle bleu, les mécaniciens. On veut tous les noms et adresses tirés de ces deux tables.

Pour que ce soit possible, les deux clauses SELECT doivent demander d’extraire le même nombre de colonnes.
Ex :
SELECT prenom, nomfamille FROM clients
UNION
SELECT prenom, nomfamille FROM mecaniciens;
Prenez note que l'union s'occupe automatiquement d'éliminer les doublons.
On peut mettre dans l’ordre désiré en mettant une seule clause ORDER BY à la fin du dernier SELECT.
Si les champs des deux tables ne portent pas le même nom et qu'on désire faire un tri, on utilisera la clause AS.
Ex :
SELECT prenom AS prenom, nomfamille AS nomfamille FROM clients
UNION
SELECT prenom AS prenom, nomfamille AS nomfamille FROM mecaniciens
ORDER BY nomfamille, prenom;
MySQL supporte la clause UNION depuis la version 4.0.
Parfois, les clauses UNION et INNER JOIN peuvent porter à confusion. Quand est-ce qu'on doit utiliser l'une ou l'autre ?
La clause INNER JOIN permet d'obtenir les enregistrements d’une table avec, à côté, les enregistrements qui correspondent dans l’autre table.
Ex :
SELECT annee, fabricant FROM voitures INNER JOIN modeles ON voitures.modele_id = modeles.id;
Résultat :
|
annee |
fabricant |
|---|---|
|
2008 |
Toyota |
|
2006 |
Volkswagen |
|
2011 |
Honda |
|
2007 |
Honda |
|
2010 |
Volkswagen |
|
2009 |
Honda |
Les données provenant d'une table apparaissent à côté de celles de l'autre table.
Avec une UNION, on obtient les enregistrements de la première requête avec, en dessous, les enregistrements de la deuxième requête sans qu’il n’y ait correspondance entre eux.
Ex :
SELECT annee, commentaire FROM voitures
UNION
SELECT ecrasement, commentaire FROM vieuxfer;
Résultat :
|
annee |
commentaire |
|---|---|
|
2008 |
Reconstruite |
|
2006 |
|
|
2011 |
Problème intermittent à trouver |
|
2007 |
|
|
2010 |
|
|
2009 |
VIP |
|
2007 |
VGA |
|
1998 |
La rouille avait pris le dessus! |
|
2002 |
Réparations plus chères que la valeur de la voiture |
Les données provenant de la première requête apparaissent en-dessous de celles de la seconde requête.
▼Publicité