> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-fbfa8bee.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Structure de données préparée facultative pour les opérations JOIN.

# Moteur de table Join

Structure de données préparée facultative pour les opérations [JOIN](/fr/reference/statements/select/join).

<Note>
  Dans ClickHouse Cloud, si votre service a été créé avec une version antérieure à 25.4, vous devrez définir la compatibilité sur 25.4 minimum à l’aide de `SET compatibility=25.4`.
</Note>

<div id="creating-a-table">
  ## Créer une table
</div>

```sql theme={null}
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
) ENGINE = Join(join_strictness, join_type, k1[, k2, ...])
```

Consultez la description détaillée de la requête [CREATE TABLE](/fr/reference/statements/create/table).

<div id="engine-parameters">
  ## Paramètres du moteur
</div>

<div id="join_strictness">
  ### `join_strictness`
</div>

`join_strictness` – [strictesse de JOIN](/fr/reference/statements/select/join#supported-types-of-join).

<div id="join_type">
  ### `join_type`
</div>

`join_type` – [type de JOIN](/fr/reference/statements/select/join#supported-types-of-join).

<div id="key-columns">
  ### Colonnes clés
</div>

`k1[, k2, ...]` – Colonnes clés de la clause `USING` utilisées par l’opération `JOIN`.

Saisissez les paramètres `join_strictness` et `join_type` sans guillemets, par exemple `Join(ANY, LEFT, col1)`. Ils doivent correspondre à l’opération `JOIN` pour laquelle la table sera utilisée. Si les paramètres ne correspondent pas, ClickHouse ne lève pas d’exception et peut renvoyer des données incorrectes.

<div id="specifics-and-recommendations">
  ## Spécificités et recommandations
</div>

<div id="data-storage">
  ### Stockage des données
</div>

Les données de la table `Join` se trouvent toujours en RAM. Lors de l’insertion de lignes dans une table, ClickHouse écrit des blocs de données dans le répertoire situé sur le disque afin de pouvoir les restaurer au redémarrage du serveur.

Si le serveur redémarre incorrectement, le bloc de données sur le disque peut être perdu ou endommagé. Dans ce cas, vous devrez peut-être supprimer manuellement le fichier contenant les données endommagées.

<div id="selecting-and-inserting-data">
  ### Sélection et insertion de données
</div>

Vous pouvez utiliser des requêtes `INSERT` pour ajouter des données aux tables du moteur `Join`. Si la table a été créée avec la strictesse `ANY`, les données associées à des clés dupliquées sont ignorées. Avec la strictesse `ALL`, toutes les lignes sont ajoutées.

Les principaux cas d’utilisation des tables du moteur `Join` sont les suivants :

* Placer la table du côté droit dans une clause `JOIN`.
* Appeler la fonction [joinGet](/fr/reference/functions/regular-functions/other-functions#joinGet), qui permet d’extraire des données de la table de la même manière que depuis un dictionnaire.

<div id="deleting-data">
  ### Suppression des données
</div>

Les requêtes `ALTER DELETE` pour les tables utilisant le moteur `Join` sont implémentées sous forme de [mutations](/fr/reference/statements/alter/index#mutations). La mutation `DELETE` lit les données filtrées et réécrit les données en mémoire et sur disque.

<div id="join-limitations-and-settings">
  ### Limitations et paramètres
</div>

Lors de la création d'une table, les paramètres suivants sont appliqués :

<div id="join_use_nulls">
  #### `join_use_nulls`
</div>

[join\_use\_nulls](/fr/reference/settings/session-settings#join_use_nulls)

<div id="max_rows_in_join">
  #### `max_rows_in_join`
</div>

[max\_rows\_in\_join](/fr/reference/settings/session-settings#max_rows_in_join)

<div id="max_bytes_in_join">
  #### `max_bytes_in_join`
</div>

[max\_bytes\_in\_join](/fr/reference/settings/session-settings#max_bytes_in_join)

<div id="join_overflow_mode">
  #### `join_overflow_mode`
</div>

[join\_overflow\_mode](/fr/reference/settings/session-settings#join_overflow_mode)

<div id="join_any_take_last_row">
  #### `join_any_take_last_row`
</div>

[join\_any\_take\_last\_row](/fr/reference/settings/session-settings#join_any_take_last_row)

<div id="join_use_nulls">
  #### `join_use_nulls`
</div>

<div id="persistent">
  #### Persistant
</div>

Désactive la persistance pour les moteurs de table Join et [Set](/fr/reference/engines/table-engines/special/set).

Réduit le surcoût d’E/S. Convient aux scénarios privilégiant les performances et ne nécessitant pas de persistance.

Valeurs possibles :

* 1 — Activé.
* 0 — Désactivé.

Valeur par défaut : `1`.

Les tables du moteur `Join` ne peuvent pas être utilisées dans des opérations `GLOBAL JOIN`.

Le moteur `Join` permet de définir le paramètre [join\_use\_nulls](/fr/reference/settings/session-settings#join_use_nulls) dans l’instruction `CREATE TABLE`. La requête [SELECT](/fr/reference/statements/select/index) doit utiliser la même valeur pour `join_use_nulls`.

<div id="example">
  ## Exemples d’utilisation
</div>

Création de la table de gauche :

```sql theme={null}
CREATE TABLE id_val(`id` UInt32, `val` UInt32) ENGINE = TinyLog;
```

```sql theme={null}
INSERT INTO id_val VALUES (1,11), (2,12), (3,13);
```

Création de la table `Join` de droite :

```sql theme={null}
CREATE TABLE id_val_join(`id` UInt32, `val` UInt8) ENGINE = Join(ANY, LEFT, id);
```

```sql theme={null}
INSERT INTO id_val_join VALUES (1,21), (1,22), (3,23);
```

Jointure de tables :

```sql theme={null}
SELECT * FROM id_val ANY LEFT JOIN id_val_join USING (id);
```

```text theme={null}
┌─id─┬─val─┬─id_val_join.val─┐
│  1 │  11 │              21 │
│  2 │  12 │               0 │
│  3 │  13 │              23 │
└────┴─────┴─────────────────┘
```

Autre possibilité : vous pouvez récupérer des données à partir de la table `Join` en spécifiant la valeur de la clé de jointure :

```sql theme={null}
SELECT joinGet('id_val_join', 'val', toUInt32(1));
```

```text theme={null}
┌─joinGet('id_val_join', 'val', toUInt32(1))─┐
│                                         21 │
└────────────────────────────────────────────┘
```

Suppression d’une ligne de la table `Join` :

```sql theme={null}
ALTER TABLE id_val_join DELETE WHERE id = 3;
```

```text theme={null}
┌─id─┬─val─┐
│  1 │  21 │
└────┴─────┘
```
