fullselect
L'instruction fullselect est un composant de l'instruction select, de l'instruction INSERT et de l'instruction CREATE VIEW. Il s'agit également d'un composant de certains prédicats qui, à leur tour, sont des composants d'une instruction.
Les opérateurs d'ensemble UNION, EXCEPT et INTERSECT correspondent à l'union, à la différence et à l'intersection des opérateurs relationnels.
Une instruction FULLSELECT spécifie une table de résultats. Si un opérateur d'ensemble n'est pas utilisé, le résultat de l'instruction FULLSELECT est le résultat de la clause de sous-requête ou de valeurs spécifiée.
L'autorisation d'une instruction fullselect est décrite dans la section Autorisation de la rubrique "Requêtes SQL".
- valeurs-clause
- Dérive une table de résultats en spécifiant les valeurs réelles, à l'aide d'expressions ou d'expressions de ligne, pour chaque colonne d'une ligne de la table de résultats. Plusieurs lignes peuvent être spécifiées. Si plusieurs lignes sont spécifiées, les valeurs de variable d'indicateur étendu DEFAULT et UNASSIGNED ne doivent pas être utilisées (SQLSTATE 22539). Le type de résultat d'une expression dans la clause values-clause ne peut pas être un type de ligne (SQLSTATE 428H2).
NULL ne peut être utilisé qu'avec plusieurs spécifications de values-row, soit comme valeur de colonne d'une table de résultats de colonne unique, soit dans une expression-ligne, et au moins une ligne de la même colonne ne doit pas être NULL (SQLSTATE 42608).
Une ligne de valeurs est spécifiée par:- Une expression unique pour une table de résultats à une seule colonne
- n expressions (ou NULL) séparées par des virgules et placées entre parenthèses, où n est le nombre de colonnes dans la table de résultats ou une expression de ligne pour une table de résultats à plusieurs colonnes.
Une clause VALUES de plusieurs lignes doit avoir le même nombre de colonnes dans chaque ligne-valeurs (SQLSTATE 42826).
Les exemples suivants montrent values-clause et leur signification.VALUES (1),(2),(3) - 3 rows of 1 column VALUES 1, 2, 3 - 3 rows of 1 column VALUES (1, 2, 3) - 1 row of 3 columns VALUES (1,21),(2,22),(3,23) - 3 rows of 2 columnsUne clause-valeurs composée de n spécifications de ligne-valeurs, RE1 à REn, où n est supérieur à 1, équivaut à:RE1 UNION ALL RE2 ... UNION ALL REnCela signifie que les colonnes correspondantes de chaque ligne de valeurs doivent être comparables (SQLSTATE 42825).
UNION ou UNION TOUTES - Dérive une table de résultats en combinant deux autres tables de résultats (R1 et R2). Si UNION ALL est spécifié, le résultat comprend toutes les lignes de R1 et R2. Si UNION est spécifié sans l'option ALL, le résultat est l'ensemble de toutes les lignes dans R1 ou R2, avec les lignes en double éliminées. Dans les deux cas, cependant, chaque ligne de la table UNION est soit une ligne de R1 , soit une ligne de R2. SAUF ou SAUF TOUT
- Dérive une table de résultats en combinant deux autres tables de résultats (R1 et R2). Si EXCEPT ALL est spécifié, le résultat est constitué de toutes les lignes qui n'ont pas de ligne correspondante dans R2, où les lignes en double sont significatives. Si EXCEPT est spécifié sans l'option ALL, le résultat se compose de toutes les lignes qui se trouvent uniquement dans R1, avec des lignes en double dans le résultat de cette opération éliminées.
Pour la compatibilité avec d'autres implémentations SQL, MINUS peut être spécifié comme synonyme d'EXCEPT.
INTERSECT ou INTERSECT ALL - Dérive une table de résultats en combinant deux autres tables de résultats (R1 et R2). Si INTERSECT ALL est spécifié, le résultat est constitué de toutes les lignes qui se trouvent à la fois dans R1 et R2. Si INTERSECT est spécifié sans l'option ALL, le résultat est constitué de toutes les lignes qui se trouvent à la fois dans R1 et R2, les lignes en double étant éliminées.
L'expression qui correspond à la nième colonne dans R1 et R2 peut référencer des colonnes avec des masques de colonne. La nième colonne du résultat de l'opération d'ensemble peut être dérivée des valeurs masquées dans R1 ou R2.
- L'expression correspondant à la nième colonne dans R1 fait référence à des colonnes avec des masques de colonne, mais l'expression correspondant à la nième colonne dans R2 ne le fait pas. Le contraire est également vrai.
- Les expressions correspondant à la nième colonne dans les colonnes de référence R1 et R2 avec des masques de colonne différents.
- La définition de masque de colonne fait référence à des colonnes qui ne sont pas la même colonne cible pour laquelle le masque de colonne est défini, et ces colonnes ne font pas partie de l'opération d'ensemble. Il est recommandé que la définition de masque de colonne ne fasse pas référence à d'autres colonnes de la table cible.
Par exemple, une ligne dans R1 est dérivée de la valeur masquée et une ligne dans R2 est dérivée de la valeur non masquée. Si la ligne de la table de résultats provient de R1, la valeur masquée est renvoyée. Si la ligne de la table de résultats provient de R2, la valeur non masquée est renvoyée.
- clause order-by-clause
- Se référer à la sous-sélection pour plus de détails sur l' ordre par clause. Une instruction FULLSELECT contenant une clause ORDER BY ne peut pas être spécifiée dans (SQLSTATE 428FJ):
- Une table de requêtes matérialisée
- Instruction FULLSELECT la plus externe d'une vue
Remarque: une clause ORDER BY dans une instruction FULLSELECT n'affecte pas l'ordre des lignes renvoyées par une requête. Une clause ORDER BY affecte uniquement l'ordre des lignes renvoyées si elle est spécifiée dans l'instruction FULLSELECT la plus externe. Spécifiez un order-by-clause pour garantir un ordre prévisible permettant de déterminer l'ensemble de lignes à partir de l'instruction FULLSELECT si offset-clause ou fetch-clause sont spécifiés.clause-décalage - Se référer à la sous-sélection pour les détails de la clause de décalage. Une instruction FULLSELECT contenant une clause OFFSET ne peut pas être spécifiée dans les situations suivantes (SQLSTATE 428FJ):
- Une table de requêtes matérialisée
- Instruction FULLSELECT la plus externe d'une vue
clause-extraction - Se référer à subselect pour plus de détails sur la clause de recherche. Une instruction FULLSELECT contenant une clause FETCH ne peut pas être spécifiée dans les situations suivantes (SQLSTATE 428FJ):
- Une table de requêtes matérialisée
- Instruction FULLSELECT la plus externe d'une vue
clause-isolement - Se référer à subselect pour les détails de la clause d'isolation. Si isolation-clause est spécifié pour une instruction FULLSELECT et qu'elle peut s'appliquer également à une sous-requête de l'instruction FULLSELECT, isolation-clause est appliqué à l'instruction FULLSELECT. Par exemple, prenez en compte la requête suivante.
Même si la clause d'isolement WITH UR peut s'appliquer uniquement à la sous-requête SELECT NAME FROM CATALOG, elle est appliquée à l'intégralité de l'instruction FULLSELECT.SELECT NAME FROM PRODUCT UNION SELECT NAME FROM CATALOG WITH UR
Le nombre de colonnes dans les tables de résultats R1 et R2 doit être identique (SQLSTATE 42826). Si le mot clé ALL n'est pas spécifié, R1 et R2 ne doivent pas inclure de colonnes dont le type de données est CLOB, DBCLOB, BLOB, de type distinct sur l'un de ces types ou de type structuré (SQLSTATE 42907).
Le nom de colonne de la ne colonne de la table de résultats est le nom de la ne colonne de R1 si elle est nommée. Sinon, la nième colonne de la table de résultats ne porte pas de nom. Si l'instruction FULLSELECT est utilisée en tant qu'instruction SELECT, un nom généré est fourni lorsque l'instruction est décrite. Le nom généré ne peut pas être utilisé dans d'autres parties de l'instruction SQL, telles que la clause ORDER BY ou UPDATE. Le nom généré peut être déterminé en exécutant une instruction DESCRIBE de l'instruction SQL et en consultant la zone SQLNAME.
Lignes en double: Deux lignes sont des doublons si chaque valeur de la première est égale à la valeur correspondante de la seconde. Pour déterminer les doublons, deux valeurs nulles sont considérées comme égales et deux représentations en virgule flottante décimale du même nombre sont considérées comme égales. Par exemple, 2.00 et 2.0 ont la même valeur (2.00 et 2.0 sont identiques) mais ont des exposants différents, ce qui vous permet de représenter à la fois 2.00 et 2.0. Par exemple, si la table de résultats d'une opération UNION contient une colonne à virgule flottante décimale et qu'il existe plusieurs représentations du même nombre, celle renvoyée (par exemple, 2.00 ou 2.0) est imprévisible. Pour plus d'informations, voir Comparaisons numériques.
Lorsque plusieurs opérations sont combinées dans une expression, les opérations entre parenthèses sont effectuées en premier. S'il n'y a pas de parenthèses, les opérations sont effectuées de gauche à droite, à l'exception que toutes les opérations INTERSECT sont effectuées avant les opérations UNION ou EXCEPT.
Dans l'exemple suivant, les valeurs des tables R1 et R2 sont affichées à gauche. Les autres en-têtes répertoriés affichent les valeurs résultant de diverses opérations d'ensemble sur R1 et R2.
| R1 | R2 | UNION ALL | UNION | Except All | EXCEPTION | INTERSECTER TOUT | INTERSECTE |
|---|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 1 | 2 | 1 | 1 |
| 1 | 1 | 1 | 2 | 2 | 5 | 1 | 3 |
| 1 | 3 | 1 | 3 | 2 | 3 | 4 | |
| 2 | 3 | 1 | 4 | 2 | 4 | ||
| 2 | 3 | 1 | 5 | 4 | |||
| 2 | 3 | 2 | 5 | ||||
| 3 | 4 | 2 | |||||
| 4 | 2 | ||||||
| 4 | 3 | ||||||
| 5 | 3 | ||||||
| 3 | |||||||
| 3 | |||||||
| 3 | |||||||
| 4 | |||||||
| 4 | |||||||
| 4 | |||||||
| 5 |
