SELECT (para recuperar filas)

Utilice el comando SELECT para recuperar filas de una tabla o vista. Devuelve las filas que cumplen los criterios que se especifiquen, incluida la condición WHERE. Si omite la condición WHERE, el comando SELECT elige de todas las filas.

Nota: para obtener una descripción de cómo utilizar el comando SELECT para iniciar un procedimiento almacenado en un host de Netezza Performance Server, consulte el comando SELECT.
El sistema forma filas de salida calculando las expresiones de la salida select para cada fila seleccionada.
  • Puede incluir * en la lista de salida como procedimiento rápido para indicar todas las columnas de las filas seleccionadas. También puede indicar <table>.* como forma abreviada para las columnas que proceden de una tabla específica. Consultar una tabla describe las funciones que puede utilizar dentro de un comando SELECT.
  • Puede utilizar la palabra clave distinct para eliminar filas duplicadas del resultado. La palabra clave all (el valor predeterminado) devuelve todas las filas candidatas, incluidas las duplicadas.

Sintaxis

Sintaxis para utilizar el comando SELECT para recuperar filas de una tabla o lista:
SELECT [ DISTINCT | ALL ] [ * | <col> [ AS <output_name> ]
  <expression> [ AS <output_name> ] [,<expression> [ AS <output_name> ]…]
    [ FROM <from_item>[,<from_item>…] ]
    [ WHERE <condition> ]
    [ GROUP BY <expression>[,<expression>…] ]
    [ HAVING <condition>[,<condition>…] ]
    [ { UNION | INTERSECT | EXCEPT | MINUS }[ DISTINCT | ALL ]
SELECT
    [ ORDER BY <expression> [ ASC | DESC | USING <operator>
                          [NULLS {FIRST | LAST}][, …] ]
    [ LIMIT { <count> | ALL } ]
Donde <from_item> representa:
<table>
     [ [ AS ] <alias> [ ( <column_alias_list> ) ] ] |
     [ FOR SYSTEM_TIME 
       { AS OF <timestamp-expression> | 
         BEFORE <timestamp-expr> | 
         BETWEEN <timestamp-expression1> AND <timestamp-expression2> | 
         FROM <timestamp-expression1> TO <timestamp-expression2> } ] |
     ( <select> ) [ AS ] <alias> [ ( <column_alias_list> ) ] |
      <from_item> [ NATURAL ] <join_type> <from_item>
         [ ON <join_condition> | USING ( <join_column_list> ) ]

Para obtener más información sobre FOR SYSTEM_TIME, consulte Sintaxis de consulta y marcas de tiempo.

Entradas

El comando SELECT toma las siguientes entradas:

Tabla 1. Entradas de SELECT
Entrada Descripción
alias Especifica un nombre sustituto para el nombre de la tabla precedente. Utiliza un alias para mayor brevedad o para eliminar la ambigüedad para las uniones automáticas (donde la misma tabla se explota varias veces). Si escribe un alias, también puede escribir una lista de alias de columna para proporcionar nombres sustituto para una o más columnas de la tabla.
<col> Nombre de una columna.
<output_name> En la salida se proporcionará el nombre de la columna. Generalmente, este nombre se utiliza para etiquetar una columna para visualizarla. También se puede utilizar para hacer referencia al valor de columna en cláusulas ORDER BY y GROUP BY.

Este nombre no se puede utilizar en cláusulas WHERE o HAVING; en lugar de eso, copie al detalle la expresión.

<expression> Nombre de una columna de tabla o de una expresión.
FROM La cláusula FROM especifica una o más tablas de origen para el comando SELECT. Si especifica varios orígenes, el resultado es el producto cartesiano de todas las filas de todos los orígenes. Aunque, generalmente, añade condiciones eliminatorias para restringir las filas que el sistema devuelve a algunos productos cartesianos.

Puede poner entre paréntesis un comando subselect dentro de la cláusula FROM. Utilizar un comando subselect es la única forma de obtener varios niveles de agrupación, agregación u ordenación en una única consulta.

Debe especificar un alias para el comando subselect.

Un elemento FROM puede ser una cláusula de unión, que combina dos elementos from más simples. Utilice paréntesis, si es necesario, para determinar el orden de anidamiento.

<from_item> Una referencia de tabla, subselección o cláusula de unión.

Para obtener más información sobre FOR SYSTEM_TIME, consulte Sintaxis de consulta y marcas de tiempo.

WHERE Esta cláusula tiene la siguiente forma general:
WHERE boolean_expr
La parte exp_booleana de la cláusula puede constar de una expresión que produce un valor booleano. En muchos casos, utiliza la expresión de la siguiente manera:
expr cond_op expr
or 
log_op expr
donde:
  • cond_op puede ser: =, <, <=, >, >= o <>, un operador condicional como all, any, in, like o un operador definido localmente.
  • log_op puede ser: and, or, not. select ignora todas las filas para las que la condición WHERE no devuelve verdadero.
GROUP BY Utilice esta cláusula para dividir una tabla en grupos de filas que coinciden con uno o más valores. La cláusula especifica una tabla agrupada que se deriva aplicando la cláusula:
GROUP BY <expression>[,<expression>…]

La cláusula GROUP BY condensa, en una única fila, todas las filas seleccionados que comparten valores para las columnas agrupadas. El sistema calcula las funciones agregadas entre todas las filas que forman cada grupo, produciendo un valor individual para cada grupo (mientras que sin GROUP BY, un agregado produce un único valor que se calcula en todas las filas seleccionadas). Cuando incluye la cláusula GROUP BY, la expresión o expresiones de la salida del comando SELECT no pueden hacer referencia a columnas no agrupadas excepto dentro de funciones agregadas porque habría más de un valor posible a devolver para una columna no agrupada.

Un valor group by puede ser:
  • Un nombre de columna de entrada.
  • El nombre o número ordinal de una columna de salida (expresión select).
  • Una expresión arbitraria formada desde los valores de la columna de entrada. Si hay ambigüedad, el sistema interpreta un nombre group by como un nombre de columna de entrada en lugar de un nombre de columna de salida.
HAVING La cláusula HAVING opcional tiene el formato general:
HAVING boolean_expr
donde boolean_expr es el mismo que se especifica para la cláusula where.

La cláusula HAVING especifica una tabla agrupada que se deriva de la eliminación de filas que no cumplen la boolean_expr.

La cláusula HAVING es diferente de la cláusula WHERE:
  • La cláusula WHERE filtra filas individuales antes de la aplicación de GROUP BY.
  • La cláusula HAVING filtra filas de grupos que se crearon mediante GROUP BY.

Cada columna a la que se hace referencia en boolean_expr debe hacer referencia claramente a una columna de agrupación, a menos que la referencia se muestre dentro de una función de agregado.

En una selección de agrupación, la cláusula HAVING solo puede hacer referencia a expresiones con un valor dentro de un grupo. Es decir, solo puede hacer referencia a campos de grupo, agregados o expresiones con un valor que se derivan de agregados o campos de grupo (que deben incluir constantes).

Por ejemplo, para devolver grp y recuentos de grps con más de cuatro miembros:
SELECT grp, count(id) AS n FROM emp GROUP BY grp HAVING n > 4

En una selección de no agrupación, donde la selección está agrupada conceptualmente por cero campos de grupo, solo puede hacer referencia a agregados o expresiones con un valor.

Por ejemplo, para no devolver filas si hay cuatro o menos empleados en emp, o una fila con el recuento si hay más de cuatro empleados en emp:
SELECT count(id) AS n FROM emp HAVING n > 4
<condition> Expresión booleana que proporciona un resultado de verdadero o falso.
UNIÓN El operador hace que el sistema calcule la recopilación de filas que devuelven las consultas. Elimina filas duplicadas a menos que especifique la palabra clave ALL.
table_query UNION [ ALL ] table_query
[ ORDER BY <expression> [ASC|DESC|USING operator] [, …] ]
[ LIMIT { COUNT | ALL } ]
[ OFFSET start ]
donde table_query especifica cualquier expresión select sin una cláusula ORDER BY, FOR UPDATE o LIMIT.

Si encierra una subexpresión entre paréntesis, puede incluir las cláusulas ORDER BY y LIMIT. Si no incluye paréntesis, las cláusulas se usan para aplicarlas al resultado de union, no para su expresión de entrada correcta.

El operador UNION calcula la recopilación (set union) de filas que devuelven las consultas implicadas. Las dos selecciones que representan los operandos directos de union deben dar el mismo número de columnas y las columnas correspondientes deben ser de tipos de datos compatibles.

El resultado de UNION no contiene filas duplicadas a menos que especifique la opción ALL. La opción ALL impide la eliminación de duplicados.

Varios operadores UNION en el mismo comando SELECT se evalúan de izquierda a derecha, a menos que indique lo contrario utilizando paréntesis.

INTERSECT Combina los resultados de dos consultas en un único resultado que comprime todas las filas comunes para ambas consultas. Para más información, véase Funcionamiento INTERSECT.
EXCEPT o MINUS Encuentra la diferencia entre las dos consultas y el resultado comprime la fila que pertenece únicamente a la primera consulta. Para más información, consulte la operación EXCEPT.
ORDER BY Utilice esta cláusula para ordenar las filas devueltas en el orden que especifica. Una cláusula ORDER BY puede ser:
  • El nombre o número ordinal de una columna de salida (expresión select). El número ordinal hace referencia a la posición ordinal (de izquierda a derecha) de la columna de resultados. Esta característica hace posible definir una ordenación según una columna que no tiene nombre. Por ejemplo:
    SELECT title, date_prod + 1 AS newlen
      FROM films ORDER BY newlen;
  • Una expresión arbitraria que se forme a partir de valores de columna de entrada, incluidos campos que no se muestran en la lista de resultados de select. Por ejemplo:
    SELECT name FROM distributors ORDER BY code;
    Si hay ambigüedad, un nombre de ORDER BY se interpreta como un nombre de columna de salida.

Una limitación de esta característica es que una cláusula ORDER BY que se aplica al resultado de la consulta union solo puede especificar un nombre de columna de salida o número, no una expresión.

Si una cláusula ORDER BY es un nombre simple que coincide con el nombre de la consulta de resultado y el nombre de una columna de entrada, ORDER BY lo interpreta como el nombre de la columna de resultados. Esto es lo contrario a la opción que hace la cláusula GROUP BY en la misma situación.

Puede especificarse un orden de clasificación ascendente o descendente:
ASC
Ordena en orden ascendente. Esto equivale a utilizar <. Este es el valor por defecto
DESC
Ordene en orden descendente. Es equivalente a utilizar >.
Puede especificar un orden de clasificación para datos nulos:
NULLS FIRST
Los valores nulos aparecen antes que los valores no nulos. En una ordenación ascendente, los nulos se muestran primeros en la salida, mientras que en una ordenación descendente, se muestran los últimos. Éste es el valor predeterminado.
NULLS LAST
Los valores nulos aparecen después que los valores no nulos.
LIMIT Devuelve un subconjunto de las filas que la consulta produce:
<count>
Devuelve como mucho el número especificado de filas.
TODOS
Devuelve todas las filas. Este es el valor predeterminado.

Si se especifica el parámetro LIMIT, especifique también el parámetro ORDER BY. De lo contrario, el subconjunto de las filas que se devuelve es indeterminado.

<join_column_list> Una lista de columnas de unión. Por ejemplo, especificar USING (a,b) equivale a especificar ON left_table.a = right_table.a y ON left_table.b = right_table.b.
<join_condition> Una condición de cualificación. Esta condición es similar a la condición WHERE excepto que solo se aplica a los dos from_items que se están uniendo en esta cláusula de unión.
<join_type> Uno de los siguientes tipos de unión:
  • [INNER] JOIN
  • LEFT [OUTER] JOIN
  • RIGHT [OUTER] JOIN
  • FULL [OUTER] JOIN
  • CROSS JOIN
En el caso de un tipo de unión interna o externa, es necesario incluir exactamente una de las cláusulas siguientes:
  • NATURAL
  • ON <join_condition>
  • USING (<join_column_list>)
No incluya ninguna de estas cláusulas para una unión cruzada.
<select> Un comando SELECT. Debe encerrar la subselección entre paréntesis y proporcionarle un alias.

Cuando incluye una subselección en la cláusula FROM, la subselección actúa como si se creara la salida como una tabla temporal durante este sencillo comando select.

<table> En una cláusula FROM, el nombre de una tabla o de una vista.
CROSS JOIN e INNER JOIN Da un producto cartesiano simple, el mismo que el que conseguiría si listara dos elementos en el nivel superior de FROM.

La unción cruzada y la unión interna en tipos (true) son equivalentes; no se eliminan filas por medio de la cualificación.

Estos tipos de unión son una conveniencia de notación. Puede llegar a los mismos resultados utilizando las cláusulas FROM y WHERE.

UNIÓN EXTERNA A LA IZQUIERDA Devuelve todas las filas del producto cartesiano cualificado (es decir, todas las filas combinadas que pasan su condición on), más una copia de cada una de las filas de la tabla izquierda para la que no había fila derecha que pasase la condición on.

El sistema considera solo su propia condición on o el uso de la condición de la unión para determinar las filas que tienen coincidencias. Después, aplica las condiciones OUTER ON o WHERE.

RIGHT OUTER JOIN Devuelve todas las filas unidas, más una fila para cada fila derecha que no coincida (ampliado con nulos a la izquierda).

Esto es una conveniencia de notación. Puede convertirla a unión externa a la izquierda conmutando las entradas derecha e izquierda.

UNIÓN EXTERNA COMPLETA Devuelve todas las filas unidas, más una fila para la fila izquierda no coincidente (ampliada con nulos a la derecha), más una fila para cada fila derecha no coincidente (ampliada con nulos a la izquierda).
Para todos los tipos de unión excepto la unión cruzada, es necesario escribir exactamente una de las siguientes:
ON <join_condition>
Este es el caso más general. Es posible escribir cualquier expresión de cualificación que implique las dos tablas que se desea unir.
USING <join_column_list>
Por ejemplo, especificar USING (a,b) equivale a especificar ON left_table.a = right_table.a y ON left_table.b = right_table.b. El término USING implica que sólo una de cada par de columnas equivalentes se debe incluir en la salida de unión, pero no ambas.
NATURAL
Utilice una lista USING que mencione todas las columnas con nombres similares en las tablas.

Resultados

El comando SELECT tiene las siguientes salidas:

Tabla 2. Salidas SELECT
Resultado Descripción
ROWS Devuelve el conjunto de filas completo que se obtiene como resultado de la consulta.
COUNT Devuelve el número de filas que devuelve la consulta.

Privilegios

Debe ser el usuario administrador, el propietario de la tabla, el propietario de la base de datos o del esquema donde está definida la tabla, o su cuenta debe tener privilegios de Selección sobre la tabla o la clase de objeto Tabla (o la clase Tabla externa, si la tabla de la que se está seleccionando es una tabla externa).

Uso

Se proporciona el siguiente uso de muestra.
  • Unir la tabla films con la tabla distributors:
    MYDB.SCH1(USER)=> SELECT f.title, f.did, d.name, f.date_prod, f.kind
    FROM distributors d, films f WHERE f.did = d.did;
    
       title                     |did  |name              |date_prod  |kind
       --------------------------+-----+------------------+-----------+-------
       The Third Man             |101  |British Lion      |1949-12-23 |Drama
       The African Queen         |101  |British Lion      |1951-08-11 |Romantic
       Une Femme est une Femme   |102  |Jean Luc Godard   |1961-03-12 |Romantic
       Vertigo                   |103  |Paramount         |1958-11-14 |Action
       Becket                    |103  |Paramount         |1964-02-03 |Drama
       48 Hours                  |103  |Paramount         |1982-10-22 |Action
       War and Peace             |104  |Mosfilm           |1967-02-12 |Drama
       West Side Story           |105  |United Artists    |1961-01-03 |Musical
       Bananas                   |105  |United Artists    |1971-07-13 |Comedy
       Yojimbo                   |106  |Toho              |1961-06-16 |Drama
       There's a Girl in my Soup |107  |Columbia          |1970-06-11 |Comedy
       Taxi Driver               |107  |Columbia          |1975-05-15 |Action
       Absence of Malice         |107  |Columbia          |1981-11-15 |Action
       Storia di una donna       |108  |Westward          |1970-08-15 |Romantic
       The King and I            |109  |20th Century Fox  |1956-08-11 |Musical
       Das Boot                  |110  |Bavaria Atelier   |1981-11-11 |Drama
  • Sumar la columna len de todas las películas y agrupar los resultados por estilo:
    MYDB.SCH1(USER)=> SELECT kind, SUM(len) AS total FROM films GROUP BY
    kind;
       kind     |total
       ---------+-------
       Action   |07:34
       Comedy   |02:58
       Drama    |14:28
       Musical  |06:42
       Romantic |04:38
  • Sumar la columna len de todas las películas, agrupar los resultados por estilo y mostrar los totales de grupo que duran menos de 5 horas:
    MYDB.SCH1(USER)=> SELECT kind, SUM(len) AS total FROM films GROUP BY
    kind HAVING SUM(len) < INTERVAL '5 HOUR';
       kind     | total
       ---------+------
       Comedy   | 02:58
       Romantic | 04:38
  • Ordenar el contenido de la tabla distributors según el contenido de la segunda columna (name):
    MYDB.SCH1(USER)=> SELECT * FROM distributors ORDER BY name;
    or
    MYDB.SCH1(USER)=> SELECT * FROM distributors ORDER BY 2;
       did   | name
       ------+-----------------
       109   | 20th Century Fox
       110   | Bavaria Atelier
       101   | British Lion
       107   | Columbia
       102   | Jean Luc Godard
       113   | Luso Films
       104   | Mosfilm
       103   | Paramount
       106   | Toho
       105   | United Artists
       111   | Walt Disney
       112   | Warner Bros.
       108   | Westward
  • Obtener la unión de las tablas distributors y actors y restringir los resultados a aquellos que comienzan con la letra W:
    MYDB.SCH1(USER)=> SELECT distributors.name
          FROM distributors
          WHERE distributors.name LIKE 'W%';
          UNION
          SELECT actors.name
          FROM actors
          WHERE actors.name LIKE 'W%';
       Walt Disney
       Walter Matthau
       Warner Bros.
       Warren Beatty
       Westward
       Woody Allen

Dado que solo se desean filas diferenciadas, la palabra clave ALL se omite.

watsonx.data consideraciones

Con la versión 11.2.2.9 :
  • Apache Iceberg no tienen una longitud máxima de caracteres para el tipo de datos string , lo que provoca una discrepancia con la forma en que Netezza Performance Server trata los tipos de texto. Para compensar esto, Netezza tratará todas las columnas de cadena como si tuvieran una longitud de 512 caracteres. Si sus datos tienen una cadena cuya longitud es superior a 512 caracteres, la consulta fallará con un error de desbordamiento.
    Solución temporal:
    • Establezca el tamaño de la variable DATALAKE_STRING_SIZE en un valor superior para anular el límite predeterminado de 512 caracteres.
    • Alternativamente, puede convertir manualmente la columna string a un tipo Netezza NVARCHAR con el tamaño requerido.
      Por ejemplo, para lanzar a 4096 caracteres en su lugar, ejecute:
      SELECT stringCol::NVARCHAR(4096) FROM ...
      Si alguno de los datos durante dicho lanzamiento todavía excede 4Kb de espacio asignado, el resto de los datos se truncan al tamaño especificado.
    También debe tener en cuenta los siguientes aspectos:
    • La variable de sesión DATALAKE_STRING_SIZE se aplica a todas las columnas de tipo string de una tabla.
    • Si desea tratar una columna de forma diferente a otra, puede asignar a cada columna un tamaño distinto.
    • La conversión sólo es posible para el tipo NVARCHAR().
    • El rango de la variable de sesión DATALAKE_STRING_SIZE es [1, 16000].
    • Un comportamiento similar se aplica también al tipo de datos binary, que utiliza su propia variable de entorno designada DATALAKE_BINARY_SIZE con el mismo tamaño predeterminado de 512 bytes y rango efectivo de [1, 64000].
  • Si hay nombres de esquema en Hive Metastore que son palabras clave NPS, no podrá utilizar esas palabras clave como identificadores al utilizar el esquema. Para obtener más información, consulte Nombres de esquema en Hive Metastore (HMS) que son palabras clave reservadas de NPS.