* split up select.md * array-join.md basic refactoring * distinct.md basic refactoring * format.md basic refactoring * from.md basic refactoring * group-by.md basic refactoring * having.md basic refactoring * additional index.md refactoring * into-outfile.md basic refactoring * join.md basic refactoring * limit.md basic refactoring * limit-by.md basic refactoring * order-by.md basic refactoring * prewhere.md basic refactoring * adjust operators/index.md links * adjust sample.md links * adjust more links * adjust operatots links * fix some links * adjust aggregate function article titles * basic refactor of remaining select clauses * absolute paths in make_links.sh * run make_links.sh * remove old select.md locations * translate docs/es * translate docs/fr * translate docs/fa * remove old operators.md location * change operators.md links * adjust links in docs/es * adjust links in docs/es * minor texts adjustments * wip * update machine translations to use new links * fix changelog * es build fixes * get rid of some select.md links * temporary adjust ru links * temporary adjust more ru links * improve curly brace handling * adjust ru as well * fa build fix * ru link fixes * zh link fixes * temporary disable part of anchor checks
7.6 KiB
machine_translated | machine_translated_rev | toc_priority | toc_title |
---|---|---|---|
true | 72537a2d52 |
33 | SELECT |
SELECCIONAR consultas Sintaxis
SELECT
realiza la recuperación de datos.
[WITH expr_list|(subquery)]
SELECT [DISTINCT] expr_list
[FROM [db.]table | (subquery) | table_function] [FINAL]
[SAMPLE sample_coeff]
[ARRAY JOIN ...]
[GLOBAL] [ANY|ALL] [INNER|LEFT|RIGHT|FULL|CROSS] [OUTER] JOIN (subquery)|table USING columns_list
[PREWHERE expr]
[WHERE expr]
[GROUP BY expr_list] [WITH TOTALS]
[HAVING expr]
[ORDER BY expr_list]
[LIMIT [offset_value, ]n BY columns]
[LIMIT [n, ]m]
[UNION ALL ...]
[INTO OUTFILE filename]
[FORMAT format]
Todas las cláusulas son opcionales, excepto la lista requerida de expresiones inmediatamente después SELECT
que está cubierto con más detalle debajo.
Los detalles de cada cláusula opcional se cubren en secciones separadas, que se enumeran en el mismo orden en que se ejecutan:
- CON cláusula
- Cláusula DISTINCT
- Cláusula FROM
- Cláusula SAMPLE
- Cláusula JOIN
- Cláusula PREWHERE
- Cláusula WHERE
- Cláusula GROUP BY
- Cláusula LIMIT BY
- Cláusula HAVING
- Cláusula SELECT
- Cláusula LIMIT
- UNION ALL cláusula
SELECT Cláusula
Expresiones especificado en el SELECT
cláusula se calculan después de que todas las operaciones en las cláusulas descritas anteriormente hayan finalizado. Estas expresiones funcionan como si se aplicaran a filas separadas en el resultado. Si las expresiones en el SELECT
cláusula contiene funciones agregadas, a continuación, ClickHouse procesa funciones agregadas y expresiones utilizadas como sus argumentos durante el GROUP BY agregación.
Si desea incluir todas las columnas en el resultado, use el asterisco (*
) simbolo. Por ejemplo, SELECT * FROM ...
.
Para hacer coincidir algunas columnas en el resultado con un Re2 expresión regular, puede utilizar el COLUMNS
expresion.
COLUMNS('regexp')
Por ejemplo, considere la tabla:
CREATE TABLE default.col_names (aa Int8, ab Int8, bc Int8) ENGINE = TinyLog
La siguiente consulta selecciona datos de todas las columnas que contienen a
símbolo en su nombre.
SELECT COLUMNS('a') FROM col_names
┌─aa─┬─ab─┐
│ 1 │ 1 │
└────┴────┘
Las columnas seleccionadas no se devuelven en orden alfabético.
Puede utilizar múltiples COLUMNS
expresiones en una consulta y aplicarles funciones.
Por ejemplo:
SELECT COLUMNS('a'), COLUMNS('c'), toTypeName(COLUMNS('c')) FROM col_names
┌─aa─┬─ab─┬─bc─┬─toTypeName(bc)─┐
│ 1 │ 1 │ 1 │ Int8 │
└────┴────┴────┴────────────────┘
Cada columna devuelta por el COLUMNS
expresión se pasa a la función como un argumento separado. También puede pasar otros argumentos a la función si los admite. Tenga cuidado al usar funciones. Si una función no admite la cantidad de argumentos que le ha pasado, ClickHouse lanza una excepción.
Por ejemplo:
SELECT COLUMNS('a') + COLUMNS('c') FROM col_names
Received exception from server (version 19.14.1):
Code: 42. DB::Exception: Received from localhost:9000. DB::Exception: Number of arguments for function plus doesn't match: passed 3, should be 2.
En este ejemplo, COLUMNS('a')
devuelve dos columnas: aa
y ab
. COLUMNS('c')
devuelve el bc
columna. El +
el operador no puede aplicar a 3 argumentos, por lo que ClickHouse lanza una excepción con el mensaje relevante.
Columnas que coinciden con el COLUMNS
expresión puede tener diferentes tipos de datos. Si COLUMNS
no coincide con ninguna columna y es la única expresión en SELECT
, ClickHouse lanza una excepción.
Asterisco
Puede poner un asterisco en cualquier parte de una consulta en lugar de una expresión. Cuando se analiza la consulta, el asterisco se expande a una lista de todas las columnas de la tabla MATERIALIZED
y ALIAS
columna). Solo hay unos pocos casos en los que se justifica el uso de un asterisco:
- Al crear un volcado de tabla.
- Para tablas que contienen solo unas pocas columnas, como las tablas del sistema.
- Para obtener información sobre qué columnas están en una tabla. En este caso, establezca
LIMIT 1
. Pero es mejor usar elDESC TABLE
consulta. - Cuando hay una filtración fuerte en un pequeño número de columnas usando
PREWHERE
. - En subconsultas (ya que las columnas que no son necesarias para la consulta externa están excluidas de las subconsultas).
En todos los demás casos, no recomendamos usar el asterisco, ya que solo le da los inconvenientes de un DBMS columnar en lugar de las ventajas. En otras palabras, no se recomienda usar el asterisco.
Valores extremos
Además de los resultados, también puede obtener valores mínimos y máximos para las columnas de resultados. Para hacer esto, establezca el extremo a 1. Los mínimos y máximos se calculan para tipos numéricos, fechas y fechas con horas. Para otras columnas, se generan los valores predeterminados.
An extra two rows are calculated – the minimums and maximums, respectively. These extra two rows are output in JSON*
, TabSeparated*
, y Pretty*
formato, separado de las otras filas. No se emiten para otros formatos.
En JSON*
los valores extremos se emiten en un formato separado. ‘extremes’ campo. En TabSeparated*
, la fila viene después del resultado principal, y después de ‘totals’ si está presente. Está precedido por una fila vacía (después de los otros datos). En Pretty*
formatea, la fila se muestra como una tabla separada después del resultado principal, y después de totals
si está presente.
Los valores extremos se calculan para las filas anteriores LIMIT
, pero después LIMIT BY
. Sin embargo, cuando se usa LIMIT offset, size
, las filas antes offset
están incluidos en extremes
. En las solicitudes de secuencia, el resultado también puede incluir un pequeño número de filas que pasaron por LIMIT
.
Nota
Puedes usar sinónimos (AS
aliases) en cualquier parte de una consulta.
El GROUP BY
y ORDER BY
las cláusulas no admiten argumentos posicionales. Esto contradice MySQL, pero se ajusta al SQL estándar. Por ejemplo, GROUP BY 1, 2
will be interpreted as grouping by constants (i.e. aggregation of all rows into one).
Detalles de implementación
Si la consulta omite el DISTINCT
, GROUP BY
y ORDER BY
cláusulas y el IN
y JOIN
subconsultas, la consulta se procesará por completo, utilizando O (1) cantidad de RAM. De lo contrario, la consulta podría consumir mucha RAM si no se especifican las restricciones adecuadas:
max_memory_usage
max_rows_to_group_by
max_rows_to_sort
max_rows_in_distinct
max_bytes_in_distinct
max_rows_in_set
max_bytes_in_set
max_rows_in_join
max_bytes_in_join
max_bytes_before_external_sort
max_bytes_before_external_group_by
Para obtener más información, consulte la sección “Settings”. Es posible utilizar la clasificación externa (guardar tablas temporales en un disco) y la agregación externa.
{## Artículo Original ##}