Combiner des tableaux avec UNION, INTERSECT et EXCEPT
Grâce aux opérations standard UNION, INTERSECT et EXCEPT/MINUS, vous pouvez combiner les résultats de deux ou plusieurs instructions SELECT pour construire des requêtes plus complexes.
Netezza Performance Server prend en charge trois catégories d'opérations d'ensemble :
- UNION [DISTINCT] et UNION ALL
- INTERSECT [DISTINCT] et INTERSECT ALL
- SAUF [DISTINCT] ou MOINS [DISTINCT] et SAUF TOUS, MOINS TOUS
Les instructions SQL qui contiennent des opérateurs d'ensemble sont appelées requêtes composées et chaque instruction SELECT d'une requête composée est appelée requête composante. Vous pouvez combiner deux ou plusieurs instructions SELECT dans une requête composée si elles satisfont aux conditions de compatibilité d'union suivantes :
- Les ensembles de résultats des deux requêtes doivent avoir le même nombre de colonnes.
- Les colonnes correspondantes dans les deux requêtes doivent avoir le même type de données ou être implicitement convertibles dans le même type de données.
Par exemple, une colonne de la première requête de composant peut être du type CHAR et correspondre à la colonne VARCHAR de la deuxième requête de composant, ou vice versa. Vous ne pouvez cependant pas avoir une colonne dans le premier composant qui est une DATE et la colonne correspondante dans le composant est un CHAR. Pour plus d'informations sur les conversions de types de données, voir Promotion des types de données.
La syntaxe d'une opération d'ensemble est la suivante :
<SELECT-statement>
{UNION | INTERSECT | EXCEPT | MINUS} [ALL | DISTINCT]
<SELECT-statement>
{UNION | INTERSECT | EXCEPT | MINUS} [ALL | DISTINCT]
<SELECT-statement>]*
[ORDER BY …]
[LIMIT …]
Les opérations ensemblistes sont soumises aux restrictions suivantes :
- Si les noms des colonnes correspondantes correspondent, SQL utilise le nom de la colonne dans le résultat. Si les noms de colonne correspondants diffèrent, SQL utilise le nom de colonne de la première requête de l'instruction set. Si vous souhaitez renommer une colonne dans le résultat, utilisez une clause AS dans la première requête.
- Vous ne pouvez spécifier une clause ORDER BY facultative que dans la requête finale de l'instruction set. SQL applique le tri au résultat final combiné.
- Vous pouvez spécifier une clause LIMIT facultative après la clause ORDER BY. SQL applique la limite au résultat final combiné.
- Vous ne pouvez spécifier GROUP BY et HAVING que dans des requêtes individuelles. Vous ne pouvez pas les utiliser pour influencer le résultat.