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.
- 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
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 } ]<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:
| 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: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:
donde:
|
| 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: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:
|
| HAVING | La cláusula HAVING opcional tiene el formato general: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:
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:
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:
|
| <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.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:
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:
Puede especificar un orden de clasificación para datos nulos:
|
| LIMIT | Devuelve un subconjunto de las filas que la consulta
produce:
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:
|
| <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:
|
Resultados
El comando SELECT tiene las siguientes salidas:
| 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
- Unir la tabla
filmscon la tabladistributors: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
lende 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
lende 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
distributorssegú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
distributorsyactorsy 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
- 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_SIZEen 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:
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.SELECT stringCol::NVARCHAR(4096) FROM ...
También debe tener en cuenta los siguientes aspectos:- La variable de sesión
DATALAKE_STRING_SIZEse 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_SIZEes[1, 16000]. - Un comportamiento similar se aplica también al tipo de datos binary, que utiliza su propia variable de entorno designada
DATALAKE_BINARY_SIZEcon el mismo tamaño predeterminado de 512 bytes y rango efectivo de[1, 64000].
- Establezca el tamaño de la variable
- 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.