Formation PUB200 : MySQL, 2018 Opérations ensemblistes

12.1 Union : UNION


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.

union

Pour que ce soit possible, les deux clauses SELECT doivent demander d’extraire le même nombre de colonnes.

Ex :

MySQL

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 :

MySQL

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.

UNION vs INNER JOIN

Parfois, les clauses UNION et INNER JOIN peuvent porter à confusion. Quand est-ce qu'on doit utiliser l'une ou l'autre ?

INNER JOIN

La clause INNER JOIN permet d'obtenir les enregistrements d’une table avec, à côté, les enregistrements qui correspondent dans l’autre table.

Ex :

MySQL

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.

UNION

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 :

MySQL

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é

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre