# Join

Le préfixe join permet de joindre la table chargée à une table nommée existante ou à la dernière table de données créée.

La jointure des données a pour effet d'ajouter au tableau cible un ensemble supplémentaire de champs ou d'attributs, à savoir, ceux qui ne sont pas déjà présents dans le tableau cible. Tous les noms de champ communs entre l'ensemble de données source et le tableau cible sont utilisés pour déterminer comment associer les nouveaux enregistrements entrants. C'est ce qu'on appelle communément une « jointure naturelle ». Une opération de jointure Qlik peut réduire ou augmenter le nombre d'enregistrements de la table cible obtenue par rapport à la table de départ, suivant le caractère unique de l'association de jointure et le type de jointure utilisé.

Il existe quatre types de jointures :

Left join

Les jointures Left join (jointures à gauche) constituent le type de jointure le plus courant. Par exemple, si vous avez un ensemble de données de transaction et si vous souhaitez le combiner avec un ensemble de données de référence, vous utiliserez généralement une jointure `Left Join`. Vous devez d'abord charger la table de transactions, puis charger l'ensemble de données de référence tout en le joignant via un préfixe `Left Join` à la table de transactions déjà chargée. Une jointure `Left Join` conserverait toutes les transactions telles quelles et ajouterait les champs de données de référence supplémentaires lorsqu'une correspondance est trouvée.

Inner join

Lorsque vous avez deux ensembles de données pour lesquels vous ne vous souciez que des résultats où il existe une association correspondante, envisagez d'utiliser une jointure `Inner Join`. Cela éliminera tous les enregistrements des données source chargées et de la table cible si aucune correspondance n'est trouvée. Par conséquent, cela peut aboutir à une table cible contenant moins d'enregistrements qu'avant l'opération de jointure.

Outer join

Lorsque vous devez conserver à la fois les enregistrements cible et tous les enregistrements entrants, utilisez une jointure `Outer Join`. Lorsqu'aucune correspondance n'est trouvée, chaque ensemble d'enregistrements est conservé, tandis que les champs du côté opposé de la jointure resteront vides (null).

Si le mot-clé de type est omis, le type de jointure par défaut est une jointure externe (Outer join).

Right join

Ce type de jointure conserve tous les enregistrements sur le point d'être chargés, tout en réduisant les enregistrements de la table ciblée par la jointure aux seuls enregistrements pour lesquels il existe une correspondance d'association dans les enregistrements entrants. Il s'agit d'une jointure de type niche parfois utilisée pour réduire une table d'enregistrements déjà préchargée à un sous-ensemble requis.

Exemples d'ensembles de résultats de différents types d'opérations de jointure

Exemples d'ensembles de résultats de différents types d'opérations de jointure

Exemples d'ensembles de résultats de différents types d'opérations de jointure ![Exemples d'ensembles de résultats de différents types d'opérations de jointure, avec une représentation avant et après des tables de données après chaque opération.](https://help.qlik.com/fr-FR/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-join-examples-operations.png)

Note InformationsS'il n'existe pas de noms de champ en commun entre la source et la cible d'une opération de jointure, la jointure se traduira par un produit cartésien de toutes les lignes – c'est ce qu'on appelle une « jointure croisée » (cross join).

Exemple d'ensemble de résultats d'une opération « cross join »

Exemple d'ensemble de résultats d'une opération « cross join »

Exemple d'ensemble de résultats d'une opération « cross join » ![Comparaison avant-après des données d'entrée à la sortie après une opération de jointure croisée (qui peut impliquer une opération de jointure de tout type).](https://help.qlik.com/fr-FR/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-examples-join-no-common-fields.png)

[inner | outer | left | right ]Join [ (tablename ) ]( loadstatement | selectstatement )

Arguments

| Argument | Description |
| --- | --- |
| tablename | Table nommée à comparer à la table chargée. |
| loadstatementou selectstatement | Instruction LOAD ou SELECT de la table chargée. |

Ces rubriques peuvent vous aider à utiliser cette fonction :

Rubriques connexes

| Rubrique | Description |
| --- | --- |
| [Combinaison de tables grâce à Join et Keep](https://help.qlik.com/fr-FR/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/combine-tables-join-keep.htm) | Cette rubrique fournit des explications supplémentaires sur les concepts de « regroupement » (join) et de « conservation » (keep) des ensembles de données. |
| [Keep](https://help.qlik.com/fr-FR/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Keep.htm) | Le préfixe de chargement `Keep` est similaire au préfixe `Join`, mais il ne combine pas les ensembles de données source et cible. Au lieu de cela, il rogne chaque ensemble de données en fonction du type d'opération adopté (inner, outer, left ou right). |

## Exemple 1 - Left join : Enrichissement d'une table cible à l'aide d'un ensemble de données de référence

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Join.htm)

#### Script de chargement et résultats

Vue d'ensemble

Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à un nouvel onglet.

Le script de chargement contient :

* Ensemble de données représentant des enregistrements de modification, chargé dans une table nommée `Changes`. Il inclut un champ clé Status ID.

* Deuxième ensemble de données représentant les statuts de modification, chargé et combiné avec les enregistrements de modification d'origine en le joignant avec un préfixe de chargement Left `Join`.

Cette jointure Left Join garantit que les enregistrements de modification restent intacts lors de l'ajout d'attributs de statut lorsqu'une correspondance dans les enregistrements de statut entrants est trouvée en fonction d'un Status ID commun.

Script de chargement

```
Changes:
Load * inline [ 
Change ID	Status ID	Scheduled Start Date	Scheduled End Date	Business Impact 
10030	4	19/01/2022	23/02/2022	None
10015	3	04/01/2022	15/02/2022	Low
10103	1	02/04/2022	29/05/2022	Medium
10185	2	23/06/2022	08/09/2022	None
10323	1	08/11/2022	26/11/2022	High
10326	2	11/11/2022	05/12/2022	None
10138	2	07/05/2022	03/08/2022	None
10031	3	20/01/2022	25/03/2022	Low
10040	1	29/01/2022	22/04/2022	None
10134	1	03/05/2022	08/07/2022	Low
10334	2	19/11/2022	06/02/2023	Low
10220	2	28/07/2022	06/09/2022	None
10264	1	10/09/2022	17/10/2022	Medium
10116	1	15/04/2022	24/04/2022	None
10187	2	25/06/2022	24/08/2022	Low
] (delimiter is '\t');

Status:
Left Join (Changes)
Load * inline [
Status ID	Status	Sub Status
1	Open	Not Started
2	Open	Started
3	Closed	Completed
4	Closed	Cancelled
5	Closed	Obsolete			
] (delimiter is '\t');
```

Résultats

Ouvrez le visionneur de modèle de données et notez la forme du modèle de données. Un seul tableau dénormalisé est présent. Il s'agit d'une combinaison de tous les enregistrements de modification d'origine, avec les attributs de statut correspondants joints à chaque enregistrement de modification.

Modèle de données interne obtenu

| Changes |
| --- |
| Change ID |
| Status ID |
| Scheduled Start Date |
| Scheduled End Date |
| Business Impact |
| Status |
| Sub Status |

Si vous développez la fenêtre d'aperçu dans le visionneur de modèle de données, vous verrez une partie de cet ensemble de résultats complet organisé dans un tableau :

Aperçu du tableau Changes dans le visionneur de modèle de données

| Change ID | Status ID | Scheduled Start Date | Scheduled End Date | Business Impact | Status | Sub Status |
| --- | --- | --- | --- | --- | --- | --- |
| 10030 | 4 | 19/01/2022 | 23/02/2022 | None | Closed | Cancelled |
| 10031 | 3 | 20/01/2022 | 25/03/2022 | Low | Closed | Terminé |
| 10015 | 3 | 04/01/2022 | 15/02/2022 | Low | Closed | Terminé |
| 10103 | 1 | 02/04/2022 | 29/05/2022 | Medium | Open | Not Started |
| 10116 | 1 | 15/04/2022 | 24/04/2022 | None | Open | Not Started |
| 10134 | 1 | 03/05/2022 | 08/07/2022 | Low | Open | Not Started |
| 10264 | 1 | 10/09/2022 | 17/10/2022 | Medium | Open | Not Started |
| 10040 | 1 | 29/01/2022 | 22/04/2022 | None | Open | Not Started |
| 10323 | 1 | 08/11/2022 | 26/11/2022 | High | Open | Not Started |
| 10187 | 2 | 25/06/2022 | 24/08/2022 | Low | Open | Started |
| 10185 | 2 | 23/06/2022 | 08/09/2022 | None | Open | Started |
| 10220 | 2 | 28/07/2022 | 06/09/2022 | None | Open | Started |
| 10326 | 2 | 11/11/2022 | 05/12/2022 | None | Open | Started |
| 10138 | 2 | 07/05/2022 | 03/08/2022 | None | Open | Started |
| 10334 | 2 | 19/11/2022 | 06/02/2023 | Low | Open | Started |

Étant donné que la cinquième ligne de la table Status (Status ID : '5', Status : 'Closed', Sub Status : 'Obsolete') ne correspond à aucun des enregistrements de la table Changes, les informations de cette ligne n'apparaissent pas dans l'ensemble de résultats ci-dessus.

Revenez à l'éditeur de chargement de données. Chargez les données et ouvrez une feuille. Créez une table et ajoutez ce champ comme dimension : `Status`.

Ajoutez cette mesure :

`=Count([Change ID])`

Vous pouvez maintenant inspecter le nombre de modifications (Changes) par statut (Status).

Tableau de résultats

| Status | =Count([Change ID]) |
| --- | --- |
| Open | 12 |
| Closed | 3 |

## Exemple 2 – Inner Join : Combinaison des enregistrements correspondants uniquement

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Join.htm)

#### Script de chargement et résultats

Vue d'ensemble

Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à un nouvel onglet.

Le script de chargement contient :

* Ensemble de données représentant des enregistrements de modification, chargé dans une table nommée `Changes`.

* Deuxième ensemble de données représentant les enregistrements de modification provenant du système source `JIRA`. Cet ensemble est chargé et combiné avec les enregistrements d'origine en le joignant avec un préfixe de chargement `Inner Join`.

Cette jointure `Inner Join` garantit que seuls les cinq enregistrements de modification trouvés dans les deux ensembles de données sont conservés.

Script de chargement

```
Changes:
Load * inline [
Change ID	Status ID	Scheduled Start Date	Scheduled End Date	Business Impact
10030	4	19/01/2022	23/02/2022	None
10015	3	04/01/2022	15/02/2022	Low
10103	1	02/04/2022	29/05/2022	Medium
10185	2	23/06/2022	08/09/2022	None
10323	1	08/11/2022	26/11/2022	High
10326	2	11/11/2022	05/12/2022	None
10138	2	07/05/2022	03/08/2022	None
10031	3	20/01/2022	25/03/2022	Low
10040	1	29/01/2022	22/04/2022	None
10134	1	03/05/2022	08/07/2022	Low
10334	2	19/11/2022	06/02/2023	Low
10220	2	28/07/2022	06/09/2022	None
10264	1	10/09/2022	17/10/2022	Medium
10116	1	15/04/2022	24/04/2022	None
10187	2	25/06/2022	24/08/2022	Low
] (delimiter is '\t');

JIRA_changes:
Inner Join (Changes)
Load
  [Ticket ID] AS [Change ID],
  [Source System]
inline
[
Ticket ID	Source System
10000	JIRA					
10030	JIRA
10323	JIRA
10134	JIRA
10334	JIRA
10220	JIRA
20000	TFS
] (delimiter is '\t');
```

Résultats

Chargez les données et ouvrez une feuille. Créez une table et ajoutez ces champs comme dimensions :

* `Source System`

* `Change ID`

* `Business Impact`

Vous pouvez maintenant inspecter les cinq enregistrements obtenus. Le tableau obtenu d'une fonction `Inner Join` inclura uniquement les enregistrements avec des informations correspondantes dans les deux ensembles de données.

Tableau de résultats

| Source System | Change ID | Business Impact |
| --- | --- | --- |
| JIRA | 10030 | None |
| JIRA | 10134 | Low |
| JIRA | 10220 | None |
| JIRA | 10323 | High |
| JIRA | 10334 | Low |

## Exemple 3 – Outer Join : Combinaison d'ensembles d'enregistrements en chevauchement

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Join.htm)

#### Script de chargement et résultats

Vue d'ensemble

Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à un nouvel onglet.

Le script de chargement contient :

* Ensemble de données représentant des enregistrements de modification, chargé dans une table nommée `Changes`.

* Deuxième ensemble de données représentant les enregistrements de modification provenant du système source `JIRA`. Cet ensemble est chargé et combiné avec les enregistrements d'origine en le joignant avec un préfixe de chargement `Outer Join`.

Cela garantit que tous les enregistrements de modification qui se chevauchent des deux ensembles de données sont conservés.

Script de chargement

```
// 8 Change records

Changes:
Load * inline [
Change ID	Status ID	Scheduled Start Date	Scheduled End Date	Business Impact
10030	4	19/01/2022	23/02/2022	None
10015	3	04/01/2022	15/02/2022	Low
10138	2	07/05/2022	03/08/2022	None
10031	3	20/01/2022	25/03/2022	Low
10040	1	29/01/2022	22/04/2022	None
10134	1	03/05/2022	08/07/2022	Low
10334	2	19/11/2022	06/02/2023	Low
10220	2	28/07/2022	06/09/2022	None
] (delimiter is '\t');

// 6 Change records

JIRA_changes:
Outer Join (Changes)
Load
  [Ticket ID] AS [Change ID],
  [Source System]
inline
[
Ticket ID	Source System
10030	JIRA
10323	JIRA
10134	JIRA
10334	JIRA
10220	JIRA
10597	JIRA
] (delimiter is '\t');
```

Résultats

Chargez les données et ouvrez une feuille. Créez une table et ajoutez ces champs comme dimensions :

* `Source System`

* `Change ID`

* `Business Impact`

Vous pouvez maintenant inspecter les dix enregistrements obtenus.

Tableau de résultats

| Source System | Change ID | Business Impact |
| --- | --- | --- |
| JIRA | 10030 | None |
| JIRA | 10134 | Low |
| JIRA | 10220 | None |
| JIRA | 10323 | - |
| JIRA | 10334 | Low |
| JIRA | 10597 | - |
| - | 10015 | Low |
| - | 10031 | Low |
| - | 10040 | None |
| - | 10138 | None |

## Exemple 4 – Right Join : Réduction d'une table cible à un ensemble de données principal secondaire

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Join.htm)

#### Script de chargement et résultats

Vue d'ensemble

Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à un nouvel onglet.

Le script de chargement contient :

* Ensemble de données représentant des enregistrements de modification, chargé dans une table nommée Changes.

* Deuxième ensemble de données représentant des enregistrements de modification provenant du système source Teamwork. Ces enregistrements sont chargés et combinés avec les enregistrements d'origine en les joignant avec un préfixe de chargement Right Join.

Cela garantit que seuls les enregistrements de modification Teamwork sont conservés, sans perdre aucun enregistrement Teamwork si la table cible n'a pas de valeur Change ID correspondante.

Script de chargement

```
Changes:

Load * inline [
Change ID	Status ID	Scheduled Start Date	Scheduled End Date	Business Impact
10030	4	19/01/2022	23/02/2022	None
10015	3	04/01/2022	15/02/2022	Low
10103	1	02/04/2022	29/05/2022	Medium
10185	2	23/06/2022	08/09/2022	None
10323	1	08/11/2022	26/11/2022	High
10326	2	11/11/2022	05/12/2022	None
10138	2	07/05/2022	03/08/2022	None
10031	3	20/01/2022	25/03/2022	Low
10040	1	29/01/2022	22/04/2022	None
10134	1	03/05/2022	08/07/2022	Low
10334	2	19/11/2022	06/02/2023	Low
10220	2	28/07/2022	06/09/2022	None
10264	1	10/09/2022	17/10/2022	Medium
10116	1	15/04/2022	24/04/2022	None
10187	2	25/06/2022	24/08/2022	Low
] (delimiter is '\t');

Teamwork_changes:
Right Join (Changes)
Load
  [Ticket ID] AS [Change ID],
  [Source System]
inline
[
Ticket ID	Source System
10040	Teamwork
10015	Teamwork
10103	Teamwork
10031	Teamwork
50231	Teamwork
] (delimiter is '\t');
```

Résultats

Chargez les données et ouvrez une feuille. Créez une table et ajoutez ces champs comme dimensions :

* Source System

* Change ID

* Business Impact

Vous pouvez maintenant inspecter les cinq enregistrements obtenus.

Tableau de résultats

| Source System | Change ID | Business Impact |
| --- | --- | --- |
| Teamwork | 10015 | Low |
| Teamwork | 10031 | Low |
| Teamwork | 10040 | None |
| Teamwork | 10103 | Medium |
| Teamwork | 50231 | - |

## En savoir plus

* [Load](https://help.qlik.com/fr-FR/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm)
* [Select](https://help.qlik.com/fr-FR/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Select.htm)
* [Inner](https://help.qlik.com/fr-FR/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Inner.htm)
* [Outer](https://help.qlik.com/fr-FR/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Outer.htm)
* [Left](https://help.qlik.com/fr-FR/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Left.htm)
* [Right](https://help.qlik.com/fr-FR/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Right.htm)
* [Keep](https://help.qlik.com/fr-FR/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Keep.htm)
* [Combinaison de tables grâce à Join et Keep](https://help.qlik.com/fr-FR/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/combine-tables-join-keep.htm)