ClickHouse/docs/fr/sql-reference/statements/select/index.md
Eugene Klimov b508f7b77b
update SELECT description (#11907)
Signed-off-by: Slach <bloodjazman@gmail.com>
2020-06-24 15:58:31 +03:00

8.1 KiB
Raw Blame History

machine_translated machine_translated_rev toc_priority toc_title
true 72537a2d52 33 SELECT

Sélectionnez la syntaxe des requêtes

SELECT effectue la récupération des données.

[WITH expr_list|(subquery)]
SELECT [DISTINCT] expr_list
[FROM [db.]table | (subquery) | table_function] [FINAL]
[SAMPLE sample_coeff]
[ARRAY JOIN ...]
[GLOBAL] [ANY|ALL|ASOF] [INNER|LEFT|RIGHT|FULL|CROSS] [OUTER|SEMI|ANTI] JOIN (subquery)|table (ON <expr_list>)|(USING <column_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]

Toutes les clauses sont facultatives, à l'exception de la liste d'expressions requise immédiatement après SELECT qui est abordée plus en détail dessous.

Spécificités de chaque clause facultative, sont couverts dans des sections distinctes, qui sont énumérés dans le même ordre qu'elles sont exécutées:

Clause SELECT

Expression spécifié dans le SELECT clause sont calculés après toutes les opérations dans les clauses décrites ci-dessus sont terminés. Ces expressions fonctionnent comme si elles s'appliquaient à des lignes séparées dans le résultat. Si les expressions dans le SELECT la clause contient des fonctions d'agrégation, puis clickhouse traite les fonctions d'agrégation et les expressions utilisées GROUP BY agrégation.

Si vous souhaitez inclure toutes les colonnes dans le résultat, utilisez l'astérisque (*) symbole. Exemple, SELECT * FROM ....

Pour correspondre à certaines colonnes dans le résultat avec un re2 expression régulière, vous pouvez utiliser le COLUMNS expression.

COLUMNS('regexp')

Par exemple, considérez le tableau:

CREATE TABLE default.col_names (aa Int8, ab Int8, bc Int8) ENGINE = TinyLog

La requête suivante sélectionne les données de toutes les colonnes contenant les a symbole dans leur nom.

SELECT COLUMNS('a') FROM col_names
┌─aa─┬─ab─┐
│  1 │  1 │
└────┴────┘

Les colonnes sélectionnées sont retournés pas dans l'ordre alphabétique.

Vous pouvez utiliser plusieurs COLUMNS expressions dans une requête et leur appliquer des fonctions.

Exemple:

SELECT COLUMNS('a'), COLUMNS('c'), toTypeName(COLUMNS('c')) FROM col_names
┌─aa─┬─ab─┬─bc─┬─toTypeName(bc)─┐
│  1 │  1 │  1 │ Int8           │
└────┴────┴────┴────────────────┘

Chaque colonne renvoyée par le COLUMNS expression est passée à la fonction en tant qu'argument séparé. Vous pouvez également passer d'autres arguments à la fonction si elle les supporte. Soyez prudent lorsque vous utilisez des fonctions. Si une fonction ne prend pas en charge le nombre d'arguments que vous lui avez transmis, ClickHouse lève une exception.

Exemple:

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.

Dans cet exemple, COLUMNS('a') retourne deux colonnes: aa et ab. COLUMNS('c') renvoie la bc colonne. Le + l'opérateur ne peut pas s'appliquer à 3 arguments, donc ClickHouse lève une exception avec le message pertinent.

Colonnes qui correspondent à la COLUMNS l'expression peut avoir différents types de données. Si COLUMNS ne correspond à aucune colonne et est la seule expression dans SELECT, ClickHouse lance une exception.

Astérisque

Vous pouvez mettre un astérisque dans quelque partie de la requête au lieu d'une expression. Lorsque la requête est analysée, l'astérisque est étendu à une liste de toutes les colonnes MATERIALIZED et ALIAS colonne). Il n'y a que quelques cas où l'utilisation d'un astérisque est justifiée:

  • Lors de la création d'un vidage de table.
  • Pour les tables contenant seulement quelques colonnes, comme les tables système.
  • Pour obtenir des informations sur ce que sont les colonnes dans une table. Dans ce cas, la valeur LIMIT 1. Mais il est préférable d'utiliser la DESC TABLE requête.
  • Quand il y a une forte filtration sur un petit nombre de colonnes en utilisant PREWHERE.
  • Dans les sous-requêtes (puisque les colonnes qui ne sont pas nécessaires pour la requête externe sont exclues des sous-requêtes).

Dans tous les autres cas, nous ne recommandons pas d'utiliser l'astérisque, car il ne vous donne que les inconvénients d'un SGBD colonnaire au lieu des avantages. En d'autres termes, l'utilisation de l'astérisque n'est pas recommandée.

Les Valeurs Extrêmes

En plus des résultats, vous pouvez également obtenir des valeurs minimales et maximales pour les colonnes de résultats. Pour ce faire, définissez la extrême réglage sur 1. Les Minimums et les maximums sont calculés pour les types numériques, les dates et les dates avec des heures. Pour les autres colonnes, les valeurs par défaut sont sorties.

An extra two rows are calculated the minimums and maximums, respectively. These extra two rows are output in JSON*, TabSeparated*, et Pretty* format, séparés des autres lignes. Ils ne sont pas Produits pour d'autres formats.

Dans JSON* formats, les valeurs extrêmes sont sorties dans un extremes champ. Dans TabSeparated* formats, la ligne vient après le résultat principal, et après totals si elle est présente. Elle est précédée par une ligne vide (après les autres données). Dans Pretty* formats, la ligne est sortie comme une table séparée après le résultat principal, et après totals si elle est présente.

Les valeurs extrêmes sont calculées pour les lignes avant LIMIT mais après LIMIT BY. Cependant, lors de l'utilisation de LIMIT offset, size, les lignes avant de les offset sont inclus dans extremes. Dans les requêtes de flux, le résultat peut également inclure un petit nombre de lignes qui ont traversé LIMIT.

Note

Vous pouvez utiliser des synonymes (AS alias) dans n'importe quelle partie d'une requête.

Le GROUP BY et ORDER BY les clauses ne supportent pas les arguments positionnels. Cela contredit MySQL, mais est conforme à SQL standard. Exemple, GROUP BY 1, 2 will be interpreted as grouping by constants (i.e. aggregation of all rows into one).

Détails De Mise En Œuvre

Si la requête omet le DISTINCT, GROUP BY et ORDER BY les clauses et les IN et JOIN sous-requêtes, la requête sera complètement traitée en flux, en utilisant O (1) quantité de RAM. Sinon, la requête peut consommer beaucoup de RAM si les restrictions appropriées ne sont pas spécifiées:

  • 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

Pour plus d'informations, consultez la section “Settings”. Il est possible d'utiliser le tri externe (sauvegarde des tables temporaires sur un disque) et l'agrégation externe.

{## Article Original ##}