PostgreSQL UNION
L'opérateur `UNION` de PostgreSQL est utilisé pour combiner les résultats de deux ou plusieurs requêtes `SELECT` en un seul résultat, éliminant ainsi les lignes dupliquées. Il garantit que l'ensemble des résultats combinés est unique. L'ordre de l'ensemble des résultats n'est pas intrinsèquement fait par `UNION` et doit être explicitement spécifié avec une clause `ORDER BY`.
Utilisation
L'opérateur `UNION` est utilisé lorsque vous avez besoin d'agréger les résultats de plusieurs instructions `SELECT` en un seul ensemble de données cohérent. Elle est particulièrement utile pour fusionner des tableaux dont la structure est similaire.
SELECT column1, column2, ...
FROM table1
UNION
SELECT column1, column2, ...
FROM table2;
Dans cette syntaxe, `UNION` fusionne les résultats des deux instructions `SELECT`, en éliminant les lignes dupliquées. Les noms de colonnes implicites dans l'ensemble de résultats sont dérivés de la première instruction `SELECT`.
Exemples
1. UNION de base
SELECT city
FROM customers
UNION
SELECT city
FROM suppliers;
Cet exemple fusionne une liste de villes provenant des tableaux `customers` et `suppliers`, en supprimant les doublons pour obtenir une liste unique.
2. UNION avec des noms de colonnes différents
SELECT first_name AS name
FROM employees
UNION
SELECT supplier_name AS name
FROM suppliers;
Ici, les colonnes ayant des noms différents sont combinées en utilisant `UNION`. L'alias `nom` s'applique à l'ensemble des résultats, et la cohérence des alias est cruciale pour la lisibilité et la maintenance. Les colonnes doivent être du même type de données.
3. UNION avec ORDER BY
SELECT product_name
FROM products
UNION
SELECT service_name
FROM services
ORDER BY 1;
Cet exemple combine les noms de produits et de services dans une seule liste et classe l'ensemble des résultats par ordre alphabétique. La clause `ORDER BY` utilise la position de la colonne, ce qui est généralement recommandé pour éviter toute ambiguïté.
Conseils et bonnes pratiques
- Assurez-vous de la compatibilité des colonnes. Le nombre et le type de données des colonnes de chaque `SELECT` doivent correspondre.
- Utilisez `UNION ALL` pour la performance. Si les doublons sont acceptables, `UNION ALL` évite le coût du tri et de l'élimination des doublons.
- Soyez prudent avec `ORDER BY`. Seul le `SELECT` final peut inclure une clause `ORDER BY`, affectant l'ensemble des résultats. Faites référence aux noms des colonnes de sortie ou utilisez les positions des colonnes pour éviter toute ambiguïté.
- Vérifiez la gestion de NULL. Assurez-vous que les colonnes des requêtes traitent les valeurs `NULL` de manière cohérente afin d'éviter les résultats inattendus.
- Pensez à l'indexation. L'indexation des tableaux utilisés dans les requêtes `UNION` peut optimiser les performances en accélérant la récupération des données.
- Comprendre les implications en termes de performances. L'utilisation de `UNION` peut impliquer un traitement supplémentaire pour le tri et l'élimination des doublons par rapport à `UNION ALL`.