
expressão_de_consulta :
{ especificação_de_consulta |
( expressão_de_consulta ) }
[ UNION [ ALL ]
{ especificação_de_consulta |
( expressão_de_consulta ) } ]…
Uma expressão de consulta especifica uma tabela a ser retornada numa consulta.
Se o operador UNION não for especificado:
- a expressão de consulta é atualizável, no caso da especificação de consulta ser atualizável;
- a descrição da expressão de consulta é igual à descrição da especificação de consulta.
Se o operador UNION for especificado:
- a expressão de consulta não é atualizável;
- grau de todas as especificações de consulta deve ser o mesmo;
- os nomes das colunas da tabela especificada pela expressão de consulta são iguais aos nomes das colunas da primeira especificação de consulta;
- os tipos das colunas correspondentes das especificações de consulta devem ser comparáveis;
- se o tipo de duas colunas correspondentes é CHARACTER, o tipo da coluna resultante é CHARACTER de tamanho igual ao maior dos dois tamanhos;
- se o tipo de uma das duas colunas correspondentes é NUMERIC e o outro é numérico exato, o tipo da coluna resultante é NUMERIC;
- se o tipo de uma das duas colunas correspondentes é numérico aproximado, o tipo da coluna resultante é DOUBLE;
- se o tipo de duas colunas correspondentes é DATETIME, o tipo da coluna resultante é DATETIME, as precisões das duas colunas devem ter o mesmo campo inicial que será o campo inicial da precisão da coluna resultante e o campo final da precisão resultante é o maior dos campos finais;
- se uma das duas colunas correspondentes pode ter valores nulos, então a coluna resultante pode ter valores nulos.
Na avaliação de uma expressão de consulta, as expressões entre parênteses são primeiro avaliadas. As operações de mesma precedência são avaliadas da esquerda para a direita.
O operador UNION elimina as linhas duplicadas na operação de união entre os operandos. Para que linhas duplicadas não sejam eliminadas, é necessário especificar a opção UNION ALL.
Veja também Especificação de consulta, Cláusulas e Comando SELECT dinâmico.
