selección completa

El fullselect es un componente de la sentencia select, la sentencia ALTER TABLE para la definición de una tabla de consulta materializada, la sentencia CREATE TABLE, la sentencia CREATE VIEW, la sentencia DECLARE GLOBAL TEMPORARY TABLE, la sentencia INSERT, la sentencia UPDATE y la sentencia MERGE.

Autorización para selección completa

Ver Autorización para consultas.

Sintaxis para fullselect

Leer diagrama de sintaxisOmitir el diagrama de sintaxis visualsubselección( selección completa)cláusula-values1UNIONEXCEPTINTERSECTDISTINCTALLsubselección( selección completa)cláusula-order-bycláusula-desplazamientocláusula-captación
cláusula-values
Leer diagrama de sintaxisOmitir el diagrama de sintaxis visual VALUES referencia-secuencia(, referencia-secuencia)
Notas:
  • 1 Si se especifica la cláusula values-clause, no se deben especificar también UNION, EXCEPT, INTERSECT, order-by-clause o fetch-clause. Si fullselect contiene una cláusula values, sólo debe especificarse en una sentencia select a la que se haga referencia mediante statement-name en una sentencia PREPARE.

Descripción

Una fullselect que está entre paréntesis se denomina subconsulta. Por ejemplo, se puede utilizar una subconsulta en una condición de búsqueda.

Una selección completa escalar es una selección completa, encerrada entre paréntesis, que devuelve una única fila de resultados y una única columna de resultados. Si el resultado de fullselect es no rows, se devuelve el valor nulo. Se devuelve un error si hay más de una fila en el resultado. Por ejemplo, se puede utilizar un scalar-fullselect en la cláusula de asignación de las sentencias DELETE, UPDATE y MERGE.

Una fila completa es una selección completa que devuelve una sola fila. Se devuelve un error si hay más de una fila en el resultado. Por ejemplo, se puede utilizar un select de fila completa en la cláusula de asignación de las sentencias DELETE y UPDATE.

UNION, EXCEPT, o INTERSECT
Los operadores de conjuntos, UNIÓN, EXCEPTO e INTERSECCIÓN, corresponden a los operadores relacionales de unión, diferencia e intersección. Un fullselect especifica una tabla de resultados. Si no se utiliza un operador de conjunto, el resultado de la selección completa es el resultado de la subselección especificada. De lo contrario, la tabla de resultados se obtiene combinando las otras dos tablas de resultados ( R1 y R2 ) sujetas al operador de conjuntos especificado.
UNION DISTINCT o UNION ALL
Si se ha especificado UNION ALL, el resultado consta de todas las filas de R1 y de R2. Con UNION DISTINCT, el resultado es el conjunto de todas las filas en un R1 o un R2 o con las filas duplicadas redundantes eliminadas. En cualquier caso, cada fila de la tabla de resultados de la unión es una fila de R1 o una fila de R2.

La expresión que corresponde a la columna número n en R1 y R2 puede hacer referencia a columnas con máscaras de columna. La columna número n del resultado de la unión se pueden derivar de los valores enmascarados en R1 o R2.

Con UNION DISTINCT, la eliminación de las filas duplicadas se basa en los valores no enmascarados en R1 y R2. Puesto que todas las filas proceden de R1 o R2, los valores de salida en la tabla de resultados de la unión pueden variar cuando se producen una o varias de las condiciones siguientes:

  • La expresión correspondiente a la columna número n en R1 hace referencia a las columnas con máscaras de columna. pero la expresión correspondiente a la columna número n en R2 no, o viceversa.
  • Las expresiones correspondientes a la columna número n en R1 y R2 hacen referencia a las columnas con distintas máscaras de columna.
  • La definición de la máscara de columna hace referencia a columnas que no son la misma columna de destino para la que se define la máscara de columna, y esas columnas no forman parte de la operación UNION DISTINCT. Se recomienda que la definición de máscara de columna no haga referencia a otras columnas de la tabla de destino.

Por ejemplo, una fila en R1 se deriva del valor enmascarado, y una fila en R2 se deriva del valor desenmascarado. Si la fila en la tabla de resultados procede de R1, se devuelve el valor enmascarado. Si la fila en la tabla de resultados procede de R2, se devuelve el valor desenmascarado.

EXCEPT e INTERSECT se pueden mezclar con UNION si las filas en R1 y R2 para EXCEPT e INTERSECT no hacen referencia a columnas con máscaras de columna.

Por compatibilidad con otras implementaciones de SQL, se puede especificar UNIQUE como sinónimo de DISTINCT.

EXCEPT DISTINCT o EXCEPT ALL
Si se especifica EXCEPTO TODOS, el resultado consiste en todas las filas de solo un R1, incluidas las filas duplicadas redundantes significativas. Con EXCEPT DISTINCT, el resultado consiste en todas las filas que solo están en R1, eliminando las filas duplicadas redundantes. En cualquier caso, cada fila de la tabla de resultados de la diferencia es una fila de R1 que no tiene una fila coincidente en R2.

Las máscaras de columna no se pueden aplicar a las listas de selección que derivan la tabla de resultados finales de las operaciones de conjunto si alguno de los operadores de conjunto que se utilizan para derivar la tabla de resultados finales es EXCEPTO TODO o EXCEPTO DISTINTO.

Para compatibilidad con otras implementaciones de SQL, MINUS puede especificarse como sinónimo de EXCEPT, y UNIQUE puede especificarse como sinónimo de DISTINCT.

INTERSECT DISTINCT o INTERSECT ALL
Si se especifica INTERSECT ALL, el resultado consiste en todas las filas que están tanto en R1 como en R2, incluidas las filas duplicadas redundantes significativas. Con INTERSECT DISTINCT, el resultado consiste en todas las filas que están tanto en R1 como en R2, eliminando las filas duplicadas redundantes. En cualquier caso, cada fila de la tabla de resultados de la intersección es una fila que existe tanto en R1 como en R2.

Las máscaras de columna no se pueden aplicar a las listas de selección que derivan la tabla de resultados finales de las operaciones de conjunto si alguno de los operadores de conjunto que se utilizan para derivar la tabla de resultados finales es INTERSECCIÓN TODO o INTERSECCIÓN DISTINTA.

Por compatibilidad con otras implementaciones de SQL, se puede especificar UNIQUE como sinónimo de DISTINCT.

cláusula-values
Obtiene una tabla de resultados especificando los valores reales, utilizando expresiones de secuencia, para cada columna de una fila de la tabla de resultados.

Una cláusula de valores se especifica mediante:

  • Una expresión de secuencia única para una tabla de resultados de una sola columna.
  • n expresiones de secuencia, separadas por comas y entre paréntesis. n es el número de columnas de la tabla de resultados.

Todas las columnas de resultados de una cláusula de valores no tienen nombre.

Inicio del cambiola cláusula values-clause solo debe especificarse en el select-statement fullselect externo de una sentencia PREPARE. fin del cambio

Inicio del cambiocláusula de ordenaciónfin del cambio
Inicio del cambioFL 500. Consulte la subsección para obtener detalles de la orden por cláusula. Una fullselect que contenga una cláusula order-by no puede especificarse en los siguientes contextos:
  • La selección completa más externa de una vista
    Nota : Una cláusula ORDER BY en un fullselect podría no afectar al orden de las filas devueltas por una consulta. Una cláusula ORDER BY solo afecta al orden de las filas devueltas en una consulta si se especifica en la fullselect más externa. Debe especificarse una cláusula order-by para garantizar un orden predecible para determinar el conjunto de filas de fullselect si se especifican la cláusula offset o la cláusula fetch.
  • En el fullselect externo en la instrucción RETURN de una función de tabla SQL.
fin del cambio
Inicio del cambiocláusula de compensaciónfin del cambio
Inicio del cambioFL 500 Consulte la cláusula de compensación para obtener más información sobre la cláusula de compensación. Un fullselect que contenga una cláusula offset no puede especificarse en los siguientes contextos:
  • La definición de una vista
  • La definición de una tabla de consulta materializada
  • En la instrucción RETURN de una función de tabla SQL
  • La definición de un permiso de fila
  • La definición de una máscara de columna
  • El fullselect más externo para un cursor dinámico sensible
fin del cambio
Inicio del cambiocláusula de búsquedafin del cambio
Inicio del cambioFL 500. Véase la cláusula fetch para obtener más información sobre la cláusula fetch. Un select completo que contenga una cláusula fetch no puede especificarse en los siguientes contextos:
  • La definición de una tabla de consulta materializada
  • La selección completa más externa de la definición de una vista
  • la selección completa externa en la sentencia RETURN de una función de Tabla SQL
  • El fullselect más externo para un cursor dinámico sensible
fin del cambio
Normas para las columnas
  • R1 y R2 deben tener el mismo número de columnas, y el tipo de datos de la enésima columna de R1 debe ser compatible con el tipo de datos de la enésima columna de R2.
  • La enésima columna del resultado de un operador de conjuntos se deriva de las enésimas columnas de R1 y R2. Los atributos de las columnas de resultados se determinan utilizando las reglas para las columnas de resultados.
  • R1 y R2 no deben incluir columnas que tengan un tipo de datos CLOB, BLOB, DBCLOB, XML o un tipo distinto basado en cualquiera de estos tipos. Sin embargo, esta regla no es aplicable cuando se utiliza UNION ALL con el operador de conjuntos.
  • Si la enésima columna de R1 y la enésima columna de R2 tienen el mismo nombre de columna de resultado, la enésima columna de la tabla de resultados de la operación de conjunto tiene el mismo nombre de columna de resultado. De lo contrario, la enésima columna de la tabla de resultados de la operación de conjunto no tiene nombre.
  • Los nombres de columna calificados no pueden utilizarse en la cláusula ORDER BY cuando se especifican los operadores de conjuntos.

Para obtener información sobre las combinaciones válidas de columnas de operandos y el tipo de datos de la columna de resultados, consulte Reglas para tipos de datos de resultados.

Filas duplicadas

Dos filas son duplicadas si el valor en cada columna en la primera fila es igual al valor correspondiente de la segunda fila. Para determinar duplicados, dos valores nulos se consideran iguales.

El tipo de datos DECFLOAT permite múltiples representaciones de bits del mismo número. Por ejemplo, 2.00 y 2.0 son dos números con el mismo coeficiente, pero con valores de exponente diferentes. Consulte la sección Comparaciones numéricas para obtener más información. Por lo tanto, si la tabla de resultados de UNION contiene una columna DECFLOAT y existen múltiples representaciones de bits del mismo número, el que se devuelve es impredecible.

Prioridad de los operadores
Cuando se combinan varias operaciones de conjunto en una expresión, las operaciones de conjunto entre paréntesis se realizan primero. Si el orden no se especifica entre paréntesis, las operaciones de conjuntos se realizan de izquierda a derecha, con la excepción de que todas las operaciones de INTERSECCIÓN se realizan antes que cualquier operación de UNIÓN o EXCEPTO.
Resultados de los operadores de conjuntos
La siguiente tabla ilustra los resultados de todas las operaciones de conjunto, con las filas de la tabla de resultados R1 y R2 como las dos primeras columnas y el resultado de cada operación en R1 y R2 bajo el encabezado de columna correspondiente.
Tabla 1. Ejemplo de operaciones de conjuntos UNION, EXCEPT e INTERSECT en tablas de resultados R1 y R2.
Filas en R1 Filas en R2 Resultado de UNION ALL Resultado de UNIÓN DISTINTA Resultado de EXCEPT ALL Resultado de EXCEPT DISTINCT Resultado de INTERSECT ALL Resultado de INTERSECT DISTINCT
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          

Ejemplos de selección completa

  • Ejemplo 1: Una consulta especifica la unión de las tablas de resultados R1 y R2. Una columna en R1 tiene el tipo de datos CHAR(10) y el subtipo BIT. La columna correspondiente en R2 tiene el tipo de datos CHAR(15) y el subtipo SBCS. Por lo tanto, la columna en la unión tiene el tipo de datos CHAR(15) y el subtipo BIT. Los valores de la primera columna se convierten a CHAR(15) añadiendo cinco espacios en blanco al final.

  • Ejemplo 2:

    Mostrar todas las filas de DSN8C10.EMP.

       SELECT * FROM DSN8C10.EMP;
  • Ejemplo 3: Utilizando las tablas de muestra DSN8C10.EMP y DSN8C10.EMPPROJACT, enumere los números de empleado de todos los empleados para los que sea cierta cualquiera de las siguientes afirmaciones:

    • Los números de sus departamentos empiezan por «D ».
    • Se asignan a proyectos cuyos números de proyecto comienzan por «AD ».
       SELECT EMPNO FROM DSN8C10.EMP
         WHERE WORKDEPT LIKE 'D%'
         UNION
       SELECT EMPNO FROM DSN8C10.EMPPROJACT
         WHERE PROJNO LIKE 'AD%';

    El resultado es la unión de dos tablas de resultados, una formada a partir de la tabla de muestra DSN8C10.EMP, y la otra formada a partir de la tabla de muestra DSN8C10.EMP PROJACT. El resultado, una tabla de una columna, es una lista de números de empleados. Debido a que se utilizó UNIÓN, en lugar de UNIÓN TODO, las entradas de la lista son distintas. Si en su lugar se utilizara UNION ALL, ciertos números de empleados aparecerían en la lista más de una vez. Estos serían los números de los empleados de los departamentos que empiezan por «D », mientras que sus proyectos empiezan por «AD ».

  • Ejemplo 4: Especifique una serie de uniones y ordene los resultados por la primera columna de la tabla de resultados finales.

    SELECT * FROM T1
    UNION
    SELECT * FROM T2
    UNION 
    SELECT * FROM T3
    ORDER BY 1;
  • Ejemplo 5: Especifique una serie de uniones y ordene los resultados por la primera columna de la tabla de resultados finales. La primera cláusula ORDER BY ordena las filas del resultado de la primera unión por la primera columna de esa tabla de resultados. La segunda cláusula ORDER BY se aplica como parte de la fullselect externa y hace que las filas de la tabla de resultados finales se ordenen por la primera columna de la tabla de resultados finales.

    (SELECT * FROM T1
     UNION 
     SELECT * FROM T2
     ORDER BY 1)
    UNION
    SELECT * FROM T3
    ORDER BY 1;
  • Ejemplo 6: Supongamos que existen las tablas T1 y T2 y que cada una contiene el mismo número de columnas denominadas C1, C2, etc. Este ejemplo del operador EXCEPT produce todas las filas que están en T1 pero no en T2, con las filas duplicadas eliminadas:

    (SELECT * FROM T1)
      EXCEPT DISTINCT 
    (SELECT * FROM T2);
  • Ejemplo 7: Supongamos que existen las tablas T1 y T2 y que cada una contiene el mismo número de columnas denominadas C1, C2, etc. Este ejemplo del operador INTERSECT produce todas las filas que están tanto en la tabla T1 como en la tabla T2, eliminando las filas duplicadas:

    (SELECT * FROM T1)
      INTERSECT DISTINCT 
    (SELECT * FROM T2);
  • Ejemplo 8: Recuperar el valor generado más recientemente para la secuencia MYSEQ1:

    VALUES PREVIOUS VALUE FOR MYSEQ1;
  • Ejemplo 9: Recuperar el siguiente valor de la secuencia MYSEQ1:
    VALUES NEXT VALUE FOR MYSEQ1;