SELECT recuperam dados. Por padrão, os dados solicitados são retornados ao cliente, mas, quando usadas em conjunto com INSERT INTO, também podem ser encaminhados para outra tabela.
Sintaxe
SELECT é obrigatória; todas as outras cláusulas são opcionais.
SELECT e suas cláusulas opcionais são abordados em seções separadas:
- cláusula WITH
- cláusula SELECT
- cláusula ALL
- cláusula DISTINCT
- cláusula FROM
- cláusula SAMPLE
- cláusula ARRAY JOIN
- cláusula JOIN
- cláusula PREWHERE
- cláusula WHERE
- cláusula GROUP BY
- cláusula HAVING
- cláusula WINDOW
- cláusula QUALIFY
- cláusula ORDER BY
- cláusula LIMIT BY
- cláusula LIMIT
- cláusula OFFSET
- cláusula UNION
- cláusula INTERSECT
- cláusula EXCEPT
- cláusula INTO OUTFILE
- cláusula FORMAT
Cláusula SELECT
As expressões especificadas na cláusulaSELECT são calculadas após a conclusão de todas as operações nas cláusulas descritas acima. Essas expressões funcionam como se fossem aplicadas a linhas separadas no resultado. Se as expressões na cláusula SELECT contiverem funções de agregação, o ClickHouse processa as funções de agregação e as expressões usadas como seus argumentos durante a agregação GROUP BY.
Se você quiser incluir todas as colunas no resultado, use o símbolo de asterisco (*). Por exemplo, SELECT * FROM ....
Seleção dinâmica de colunas
A seleção dinâmica de colunas (também conhecida como expressão COLUMNS) permite corresponder algumas colunas em um resultado usando uma re2 expressão regular.a no nome.
COLUMNS em uma consulta e aplicar funções a elas.
Por exemplo:
COLUMNS é passada para a função como um argumento separado. Além disso, você também pode passar outros argumentos para a função, se ela oferecer suporte a eles. Tenha cuidado ao usar funções. Se uma função não oferecer suporte ao número de argumentos que você passou para ela, o ClickHouse lança uma exceção.
Por exemplo:
COLUMNS('a') retorna duas colunas: aa e ab. COLUMNS('c') retorna a coluna bc. O operador + não pode ser aplicado a 3 argumentos, então o ClickHouse lança uma exceção com a mensagem correspondente.
As colunas que correspondem à expressão COLUMNS podem ter tipos de dados diferentes. Se COLUMNS não corresponder a nenhuma coluna e for a única expressão em SELECT, o ClickHouse lança uma exceção.
Selecione colunas com LIKE ou ILIKE
Você também pode selecionar colunas fazendo a correspondência dos nomes delas com um padrão após *, usando LIKE com diferenciação entre maiúsculas e minúsculas ou ILIKE sem diferenciação entre maiúsculas e minúsculas:
LIKE e ILIKE seguem a semântica de LIKE, e não a de expressão regular. O caractere % corresponde a qualquer sequência de caracteres, o caractere _ corresponde a qualquer caractere único, e \ escapa %, _ e \. A única diferença entre os dois é que LIKE corresponde aos nomes de colunas com diferenciação entre maiúsculas e minúsculas, enquanto ILIKE não diferencia maiúsculas de minúsculas. Por exemplo:
a, como aa e ab.
* LIKE e * ILIKE também suportam asteriscos qualificados e transformadores de colunas:
Asterisco
Você pode usar um asterisco em qualquer parte de uma consulta no lugar de uma expressão. Quando a consulta é analisada, o asterisco é expandido para uma lista de todas as colunas da tabela (exceto as colunasMATERIALIZED e ALIAS). Há apenas alguns casos em que o uso de um asterisco se justifica:
- Ao criar um dump de uma tabela.
- Em tabelas com poucas colunas, como as tabelas de sistema.
- Para obter informações sobre quais colunas existem em uma tabela. Nesse caso, defina
LIMIT 1. Mas é melhor usar a consultaDESC TABLE. - Quando há uma filtragem forte em um número pequeno de colunas usando
PREWHERE. - Em subconsultas (já que as colunas que não são necessárias para a consulta externa são excluídas das subconsultas).
Valores extremos
Além dos resultados, você também pode obter os valores mínimo e máximo das colunas de resultado. Para isso, defina a configuração extremes como 1. Os valores mínimos e máximos são calculados para tipos numéricos, datas e data/hora. Para as demais colunas, são exibidos os valores padrão. Duas linhas extras são calculadas — os mínimos e os máximos, respectivamente. Essas duas linhas extras são exibidas nos formatosXML, JSON*, TabSeparated*, CSV*, Vertical, Template e Pretty*, separadamente das demais linhas. Elas não são exibidas em outros formatos.
Nos formatos JSON* e XML, os valores extremos são exibidos em um campo separado chamado ‘extremes’. Nos formatos TabSeparated*, CSV* e Vertical, a linha aparece após o resultado principal e, se houver, após ‘totals’. Ela é precedida por uma linha vazia (depois dos demais dados). Nos formatos Pretty*, a linha é exibida como uma tabela separada após o resultado principal e, se houver, após totals. No formato Template, os valores extremos são exibidos de acordo com o template especificado.
Os valores extremos são calculados para as linhas antes de LIMIT, mas depois de LIMIT BY. No entanto, ao usar LIMIT offset, size, as linhas antes de offset são incluídas em extremes. Um intervalo LIMIT ... AFTER ... UNTIL se comporta como LIMIT neste caso: os valores extremos são calculados sobre as linhas lidas antes de o intervalo ser aplicado. Em requisições de fluxo, o resultado também pode incluir um pequeno número de linhas que passaram por LIMIT.
Observações
Você pode usar sinônimos (aliasesAS) em qualquer parte de uma consulta.
As cláusulas GROUP BY, ORDER BY e LIMIT BY podem aceitar argumentos posicionais. Para habilitar isso, ative a configuração enable_positional_arguments. Assim, por exemplo, ORDER BY 1,2 ordenará as linhas da tabela pela primeira e depois pela segunda coluna.
Detalhes de implementação
Se a consulta omitir as cláusulasDISTINCT, GROUP BY e ORDER BY e as subconsultas IN e JOIN, ela será processada inteiramente em fluxo, usando O(1) de RAM. Caso contrário, a consulta poderá consumir muita RAM se os limites adequados não forem especificados:
max_memory_usagemax_rows_to_group_bymax_rows_to_sortmax_rows_in_distinctmax_bytes_in_distinctmax_rows_in_setmax_bytes_in_setmax_rows_in_joinmax_bytes_in_joinmax_bytes_before_external_sortmax_bytes_ratio_before_external_sortmax_bytes_before_external_group_bymax_bytes_ratio_before_external_group_by
Modificadores do SELECT
Você pode usar os seguintes modificadores em consultasSELECT.
Combinações de modificadores
Você pode usar cada modificador separadamente ou combiná-los. Exemplos: Uso do mesmo modificador várias vezes.SETTINGS na consulta SELECT
Você pode especificar as configurações necessárias diretamente na consultaSELECT. O valor da configuração é aplicado apenas a essa consulta e, após a execução, volta ao valor padrão ou ao valor anterior.
Para conhecer outras formas de definir configurações, veja aqui.
Para configurações booleanas definidas como true, você pode usar uma sintaxe abreviada, omitindo a atribuição de valor. Quando apenas o nome da configuração é especificado, ela é automaticamente definida como 1 (true).
Exemplo