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.
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.
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.
O conjunto de resultados deve ser dos Clientes que fizeram Pedidos. Neste caso, nossos dados resultaram em uma linha:
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.
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
:
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.
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
:
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.
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.
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.
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.
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.
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.
Quando executamos resultados ou visualizamos os resultados da grade rápida, vemos os seguintes registros retornados:
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.
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.
O conjunto de resultados contém todos os SupplierID
's, incluindo registros duplicados se o SupplierID
aparece em ambas as tabelas.
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.