# Join

O prefixo join une a tabela carregada a uma tabela nomeada existente ou à última tabela de dados criada.

O efeito da união de dados é estender a tabela de destino por um conjunto adicional de campos ou atributos, ou seja, aqueles que ainda não estão presentes na tabela de destino. Qualquer nome de campo comum entre o conjunto de dados de origem e a tabela de destino é usado para descobrir como associar os novos registros de entrada. Isso costuma ser chamado de "união natural". Uma operação de união da Qlik pode fazer com que a tabela de destino resultante tenha mais ou menos registros do que quando começou, dependendo da exclusividade da associação de união e do tipo de união empregado.

Existem quatro tipos de uniões:

União esquerda

As uniões esquerdas são o tipo de união mais comum. Por exemplo, se você tivesse um conjunto de dados de transação e quisesse combiná-lo com um conjunto de dados de referência, normalmente usaria um `Left Join`. Você carregaria a tabela de transações primeiro e, em seguida, carregaria o conjunto de dados de referência enquanto o juntasse por meio de um prefixo `Left Join` à tabela de transações já carregada. `Left Join` manteria todas as transações como estão e adicionaria os campos de dados de referência suplementares nos quais uma correspondência fosse encontrada.

União interna

Quando houver dois conjuntos de dados nos quais você apenas se preocupa com os resultados em que há uma associação correspondente, considere usar `Inner Join`. Isso eliminará todos os registros dos dados de origem carregados e da tabela de destino se nenhuma correspondência for encontrada. Como resultado, isso pode deixar sua tabela de destino com menos registros do que antes da operação de união.

União externa

Quando você precisar manter os registros de destino e todos os registros de entrada, use `Outer Join`. Onde nenhuma correspondência for encontrada, cada conjunto de registros ainda será mantido, enquanto os campos no lado oposto da união permanecerão não preenchidos (nulos).

Se a palavra-chave "type" for omitida, o tipo de união padrão será uma união externa.

União direita

Esse tipo de união mantém todos os registros prestes a serem carregados, ao mesmo tempo em que reduz os registros na tabela direcionada pela união para somente os registros em que há uma correspondência de união nos registros de entrada. Esse é um tipo de união de nicho que às vezes é usado como meio de reduzir uma tabela de registros já pré-carregada para um subconjunto necessário.

Exemplos de conjuntos de resultados de diferentes tipos de operações de união

Exemplos de conjuntos de resultados de diferentes tipos de operações de união

Exemplos de conjuntos de resultados de diferentes tipos de operações de união ![Exemplos de conjuntos de resultados de diferentes tipos de operações de união, com uma representação antes e depois das tabelas de dados após cada operação.](https://help.qlik.com/pt-BR/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-join-examples-operations.png)

Nota informativaSe não houver nomes de campos em comum entre a origem e o destino de uma operação de união, a união resultará em um produto cartesiano de todas as linhas: isso é chamado de "união cruzada".

Exemplo de conjunto de resultados de uma operação de "união cruzada"

Exemplo de conjunto de resultados de uma operação de "união cruzada"

Exemplo de conjunto de resultados de uma operação de "união cruzada" ![Comparação antes e depois de dados de entrada com a saída após uma operação de união cruzada (que pode envolver uma operação de união de qualquer tipo).](https://help.qlik.com/pt-BR/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-examples-join-no-common-fields.png)

Sintaxe:

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

Argumentos

| Argumento | Descrição |
| --- | --- |
| tablename | A tabela nomeada a ser comparada com a tabela carregada. |
| loadstatementou selectstatement | O comando LOAD ou SELECT da tabela carregada. |

Estes tópicos podem ajudar você a trabalhar com essa função:

Tópicos relacionados

| Tópico | Descrição |
| --- | --- |
| [Combinando tabelas com Join e Keep](https://help.qlik.com/pt-BR/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/combine-tables-join-keep.htm) | Este tópico fornece uma explicação adicional dos conceitos de "união" e "manutenção" de conjuntos de dados. |
| [Keep](https://help.qlik.com/pt-BR/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Keep.htm) | O prefixo de carregamento `Keep` é semelhante ao prefixo `Join`, mas não combina os conjuntos de dados de origem e de destino. Em vez disso, ele apara cada conjunto de dados de acordo com o tipo de operação adotada (interna, externa, esquerda ou direita). |

## Exemplo 1 – União esquerda: Enriquecendo uma tabela de destino com um conjunto de dados de referência

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

#### Script de carregamento e resultados

Visão geral

Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova guia.

O script de carregamento contém:

* Um conjunto de dados que representa registros de alterações, que é carregado em uma tabela denominada `Changes`. Ele inclui um campo de chave de ID de status.

* Um segundo conjunto de dados que representa estados de alterações, que é carregado e combinado com os registros de alterações originais por meio de sua união com um prefixo de carregamento `Join` esquerdo.

Essa união esquerda garante que os registros de alterações permaneçam intactos ao adicionar atributos de status em que uma correspondência nos registros de status de entrada é encontrada com base em um ID de status comum.

Script de carregamento

```
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');
```

Resultados

Abra o Visualizador do modelo de dados e observe a forma do modelo de dados. Somente uma tabela desnormalizada está presente. É uma combinação de todos os registros de alterações originais, com os atributos de status correspondentes unidos a cada registro de alterações.

Modelo de dados interno resultante

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

Se você expandir a janela de visualização no Visualizador do modelo de dados, verá uma parte desse conjunto completo de resultados organizada em uma tabela:

Visualização da tabela Changes no visualizador do modelo de dados

| Change ID | Status ID | Scheduled Start Date | Scheduled End Date | Business Impact | Status | Sub Status |
| --- | --- | --- | --- | --- | --- | --- |
| 10030 | 4 | 19/01/2022 | 23/02/2022 | Nenhum | Closed | Cancelado |
| 10031 | 3 | 20/01/2022 | 25/03/2022 | Baixo | Closed | Concluído |
| 10015 | 3 | 04/01/2022 | 15/02/2022 | Baixo | Closed | Concluído |
| 10103 | 1 | 02/04/2022 | 29/05/2022 | Médio | Open | Não iniciado |
| 10116 | 1 | 15/04/2022 | 24/04/2022 | Nenhum | Open | Não iniciado |
| 10134 | 1 | 03/05/2022 | 08/07/2022 | Baixo | Open | Não iniciado |
| 10264 | 1 | 10/09/2022 | 17/10/2022 | Médio | Open | Não iniciado |
| 10040 | 1 | 29/01/2022 | 22/04/2022 | Nenhum | Open | Não iniciado |
| 10323 | 1 | 08/11/2022 | 26/11/2022 | Alto | Open | Não iniciado |
| 10187 | 2 | 25/06/2022 | 24/08/2022 | Baixo | Open | Iniciado |
| 10185 | 2 | 23/06/2022 | 08/09/2022 | Nenhum | Open | Iniciado |
| 10220 | 2 | 28/07/2022 | 06/09/2022 | Nenhum | Open | Iniciado |
| 10326 | 2 | 11/11/2022 | 05/12/2022 | Nenhum | Open | Iniciado |
| 10138 | 2 | 07/05/2022 | 03/08/2022 | Nenhum | Open | Iniciado |
| 10334 | 2 | 19/11/2022 | 06/02/2023 | Baixo | Open | Iniciado |

Como a quinta linha da tabela Status (ID do status: '5', Status: 'Fechado', Substatus: 'Obsoleto') não corresponde a nenhum dos registros da tabela Alterações, as informações nessa linha não aparecem no conjunto de resultados acima.

Retorne ao Editor de carregamento de dados. Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esse campo como uma dimensão: `Status`.

Adicione esta medida:

`=Count([Change ID])`

Agora, você pode inspecionar o número de alterações por status.

Tabela de resultados

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

## Exemplo 2 – União interna: Combinando somente registros correspondentes

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

#### Script de carregamento e resultados

Visão geral

Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova guia.

O script de carregamento contém:

* Um conjunto de dados que representa registros de alterações, que é carregado em uma tabela denominada `Changes`.

* Um segundo conjunto de dados que representa os registros de alterações gerados no sistema de origem `JIRA`. Esse é carregado e combinado com os registros originais por meio de sua união com um prefixo de carregamento `Inner Join`.

Essa `Inner Join` garante que apenas os cinco registros de alterações encontrados em ambos os conjuntos de dados sejam mantidos.

Script de carregamento

```
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');
```

Resultados

Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:

* `Source System`

* `Change ID`

* `Business Impact`

Agora, você pode inspecionar os cinco registros resultantes. A tabela resultante de um `Inner Join` incluirá apenas registros com informações correspondentes em ambos os conjuntos de dados.

Tabela de resultados

| Sistema de origem | Change ID | Business Impact |
| --- | --- | --- |
| JIRA | 10030 | Nenhum |
| JIRA | 10134 | Baixo |
| JIRA | 10220 | Nenhum |
| JIRA | 10323 | Alto |
| JIRA | 10334 | Baixo |

## Exemplo 3 – União externa: Combinando conjuntos de registros sobrepostos

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

#### Script de carregamento e resultados

Visão geral

Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova guia.

O script de carregamento contém:

* Um conjunto de dados que representa registros de alterações, que é carregado em uma tabela denominada `Changes`.

* Um segundo conjunto de dados que representa os registros de alterações gerados no sistema de origem `JIRA`, que é carregado e combinado com os registros originais por meio de sua união com um prefixo de carregamento `Outer Join`.

Isso garante que todos os registros de alterações sobrepostos de ambos os conjuntos de dados sejam mantidos.

Script de carregamento

```
// 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');
```

Resultados

Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:

* `Source System`

* `Change ID`

* `Business Impact`

Agora, você pode inspecionar os 10 registros resultantes.

Tabela de resultados

| Sistema de origem | Change ID | Business Impact |
| --- | --- | --- |
| JIRA | 10030 | Nenhum |
| JIRA | 10134 | Baixo |
| JIRA | 10220 | Nenhum |
| JIRA | 10323 | - |
| JIRA | 10334 | Baixo |
| JIRA | 10597 | - |
| - | 10015 | Baixo |
| - | 10031 | Baixo |
| - | 10040 | Nenhum |
| - | 10138 | Nenhum |

## Exemplo 4 – União direita: Aparando uma tabela de destino por um conjunto de dados mestre secundário

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

#### Script de carregamento e resultados

Visão geral

Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova guia.

O script de carregamento contém:

* Um conjunto de dados que representa registros de alterações, que é carregado em uma tabela denominada Changes.

* Um segundo conjunto de dados representando registros de alterações originados do sistema de origem Teamwork. Isso é carregado e combinado com os registros originais, juntando-o a um prefixo de carregamento Right Join.

Isso garante que somente os registros de alterações Teamwork sejam mantidos, sem perder nenhum registro Teamwork caso a tabela de destino não tenha um Change ID correspondente.

Script de carregamento

```
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');
```

Resultados

Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:

* Source System

* Change ID

* Business Impact

Agora, você pode inspecionar os cinco registros resultantes.

Tabela de resultados

| Sistema de origem | Change ID | Business Impact |
| --- | --- | --- |
| Trabalho em equipe | 10015 | Baixo |
| Trabalho em equipe | 10031 | Baixo |
| Trabalho em equipe | 10040 | Nenhum |
| Trabalho em equipe | 10103 | Médio |
| Trabalho em equipe | 50231 | - |

## Saiba mais

* [Load](https://help.qlik.com/pt-BR/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm)
* [Select](https://help.qlik.com/pt-BR/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Select.htm)
* [Inner](https://help.qlik.com/pt-BR/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Inner.htm)
* [Outer](https://help.qlik.com/pt-BR/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Outer.htm)
* [Left](https://help.qlik.com/pt-BR/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Left.htm)
* [Right](https://help.qlik.com/pt-BR/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Right.htm)
* [Keep](https://help.qlik.com/pt-BR/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Keep.htm)
* [Combinando tabelas com Join e Keep](https://help.qlik.com/pt-BR/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/combine-tables-join-keep.htm)