Ir para o conteúdo

Como Criar e Usar Junções e Uniões SQL

Ao criar Business Objects na Business Logic Layer, geralmente é necessário desenhar em duas tabelas separadas para exibir dados de ambas. Com App Builder, você pode configurar um tipo Join para combinar colunas de uma ou mais tabelas, ou Business Objects, para criar um novo Business Object. Este artigo o guiará pelos quatro tipos de SQL Joins suportados em App Builder- Interno, Externo Esquerdo, Cruzado e Externo Direito - e dê exemplos de como criá-los e usá-los em App Builder. Além disso, também daremos uma olhada em outro tipo de relacionamento chamado União que está disponível para configuração em Junções em App Builder.

  • Inner - O tipo Inner Join retorna linhas que existem em cada tabela
  • Cross - O Cross Join produz um produto cartesiano
  • Left Outer - Um Left Outer Join retorna todas as linhas da tabela da esquerda especificada, independentemente de uma correspondência na tabela da direita
  • Right Outer - Um Right Outer retorna todas as linhas da tabela da direita especificada, independentemente de uma correspondência na tabela da esquerda
  • Union - Combina o conjunto de resultados de duas ou mais instruções SELECT

Junção Interna

O Que é uma Junção Interna?

Inner Joins são os Joins mais frequentemente usados. Quando dadas duas tabelas, o conjunto de resultados de um Inner Join contém apenas as linhas entre as duas tabelas que são as mesmas, com base nas colunas do Join.

Innerdiagram

Exemplo

Digamos que queremos um Business Object de clientes que fizeram um pedido e os detalhes do pedido feito. Este seria um ótimo caso de uso para um Inner Join, porque um Inner Join pode retornar registros na interseção de duas tabelas. Nosso conjunto resultante deve incluir todos os CustomerID que tem um OrderID. Abaixo estão as duas tabelas Customer e Order que iremos juntar-nos.

Customertable

Uma tabela de pedidos

Antes de criar seu Inner Join, você precisa criar um Business Object. O nosso é chamado Customer (with Order). Traga as duas tabelas para o painel Tabelas. Implemente o Inner Join entre Customer e Order. A coluna Join aqui é CustomerID que é a única coluna entre as duas que é a mesma.

join1.png

Guia de coluna interna

Guia de junção interna

O conjunto de resultados deve ser dos Clientes que fizeram Pedidos. Neste caso, nossos dados resultaram em uma linha:

Innerresults

Junção Cruzada

O Que é uma Junção Cruzada?

Uma Cross Join produz um conjunto de resultados que é o número de linhas x na primeira tabela multiplicado pelo número de linhas y na segunda tabela. O conjunto de resultados será x * y linhas.

Ao tentar decidir o que faz sentido com uma Cross Join, ajuda dizer que o conjunto resultante terá colunas da tabela 1 para cada coluna na tabela 2.

Diagrama cruzado

Exemplo

Temos duas tabelas, Category e Supplier. Sabemos que cada Supplier gostaria que todos Category, então precisamos fazer um Business Object que combine essas duas tabelas. Gostaríamos de um conjunto resultante que tenha um Category para cada Supplier. Este é um exemplo perfeito de quando usar um Cross Join.

Abaixo estão os registros de exemplo para as tabelas Category e Supplier:

Registros de categoria

Um fornecedor registra

Para Cross Join essas duas tabelas, precisamos criar um novo Business Object. Chamamos o nosso Supplier (and Categories). Traga as duas tabelas que gostaríamos de Cross Join sob o painel Tables. Sob o painel Joins, indique que você gostaria de um Cross Join entre as duas tabelas.

join2.png

Uma cruz de colunas

Uma junção cruzada

Nota

Não precisamos indicar colunas Join porque, com o Cross Join, as duas tabelas não precisam ter colunas em comum para Join. Ainda podemos obter uma Category para cada Supplier.

Após implementar este Join, veremos resultados como este. Observe que há um Category para cada Supplier:

Resultados cruzados

Junção Externa Esquerda

O Que é uma Junção Externa Esquerda?

Um Left Outer Join busca todas as linhas correspondentes de duas tabelas (a interna entre as duas) mais as linhas que não correspondem a nenhuma linha na segunda tabela. Isso é útil quando você quer todos os resultados comuns entre duas tabelas, mas também quer os valores nulos na tabela esquerda.

Um leftouterdiagram

Exemplo

Você pode querer uma lista de todos os clientes, quer eles tenham feito um pedido ou não. Neste caso, um Left Outer Join seria perfeito. Este exemplo é semelhante ao exemplo anterior de Inner Join, exceto que neste caso também queremos ver resultados onde há um CustomerID listado sem um OrderID.

Abaixo estão as tabelas que estamos usando: Customer e Order. Elas são as mesmas tabelas que usamos para o exemplo de um Inner Join.

Customertable

Uma tabela de pedidos

Esta declaração de Business Object é muito similar ao business object do exemplo Inner Join. A única diferença é o nome e a declaração desta junção como Left Outer em vez de Inner Join.

join3.png

Guia de coluna interna

A lo se junta

Os resultados nos dão os mesmos resultados que o Inner Join nos deu, mais as linhas no Customer tabela que não corresponde a nenhuma linha na Order tabela.

Há 92 resultados desta vez.

A lo results

Externo Direito

O Que é uma Junção Externa Direita?

A terceira junção é uma Right Outer Join, que é exatamente o oposto de uma Left Outer. Usar uma ou outra geralmente não importa porque você sempre pode alternar uma tabela do lado esquerdo para o direito da junção e isso obtém o mesmo efeito. Os resultados variam dependendo de qual junção você escolher e da ordem das tabelas adicionadas ao painel Joins.

Um diagrama ro

Exemplo

Como um exemplo de querer mudar de um Left Outer Join para um Right Outer Join, você pode querer visualizar todos os seus Clientes com ou sem Pedidos, bem como todos os Detalhes do Pedido com ou sem Pedidos ou Produtos. A declaração abaixo é uma maneira de configurar essa lógica.

join4.png

A ro colunas

A ro se junta

Quando executamos resultados ou visualizamos os resultados da grade rápida, vemos os seguintes registros retornados:

A ro results

União

O Que é um Sindicato?

Em App Builder, Union Joins produzem uma combinação de duas instruções select que têm como alvo a mesma coluna. Um Union Join combina os resultados de duas colunas diferentes (que têm o mesmo nome) de duas tabelas diferentes em uma coluna unificada. Enquanto a maioria dos Joins utiliza uma coluna Join, o Union Join não. Isso ocorre porque outros Joins exigem contexto compartilhado entre as duas tabelas para funcionar, mas um Union Join requer apenas colunas compartilhadas.

Exemplo 1

Por exemplo, uma Inner Join entre o Product e Supplier as tabelas mostrariam cada produto junto com seu fornecedor, enquanto uma União de Junção entre os Product e Supplier tabelas mostrariam uma lista de todos os diferentes SupplierID campos. Isso ocorre porque o Union Join essencialmente mostra todos os resultados da mesma coluna em duas tabelas diferentes, e essas duas tabelas compartilham apenas o SupplierID. Lembre-se de que com Joins, compartilhar contexto e ter a mesma coluna são dois critérios diferentes.

Abaixo estão as duas tabelas Supplier e Product.

Um fornecedor resulta

Um produto resulta

Agora você pode criar seu Business Object que usará o Union Join. Nós chamamos o nosso Supplier (Union with Product). Traga as tabelas que você usará para o painel Tables. Declare uma Union entre as duas tabelas no painel Joins. Novamente, essa Join não requer Join Column. O painel Columns só nos permite adicionar SupplierID como uma coluna porque é a única coluna que as duas tabelas têm em comum.

join5.png

Uma união de colunas

Um sindicato se junta

O conjunto de resultados contém todos os SupplierID's, incluindo registros duplicados se o SupplierID aparece em ambas as tabelas.

Resulta uma união

Exemplo 2

Outro caso de uso para uma União é se um cliente pede para você encontrar todos os respondentes, mas os usuários podem responder de várias maneiras. Digamos que um usuário pode responder por email que é inserido em uma tabela chamada EmailRespondants, mas também podem responder por telefone usando o PhoneRespondant tabela. Você pode unir as tabelas para encontrar as colunas que elas têm em comum, o que pode ser RespondantID e RespondType para receber uma lista de todas as pessoas que responderam e como responderam. Desta forma, você também pode ver o mesmo RespondantID várias vezes, mas ser capaz de ver como eles responderam cada vez.