Auto-associação SQL

Auto Associacao Sql



Um dos recursos mais conhecidos dos bancos de dados relacionais são as junções. As junções são um dos recursos mais poderosos e complexos dos bancos de dados relacionais. Eles permitem ampla modularidade e relacionamentos muito complexos entre tabelas de banco de dados sem comprometer o desempenho.

No entanto, existe um tipo de junção no SQL que tende a passar despercebido, conhecido como auto-junção.

Em SQL, a autojunção é uma técnica poderosa que nos permite combinar as linhas da mesma tabela com base em uma coluna relacionada dentro da mesma tabela.







Ao contrário de outro tipo de junção em SQL, onde pegamos os dados de várias tabelas, uma junção automática funciona em uma única tabela.



Você pode se perguntar: por que preciso de uma autojunção quando posso consultar os dados da própria tabela? Embora isso possa ser verdade, uma autojunção pode ajudar em tarefas quando você precisa realizar consultas de dados recursivas ou encontrar dados hierárquicos.



Essencialmente, uma autojunção desempenha um papel fundamental quando você precisa comparar as linhas da mesma tabela.





Junte-se a nós nesta postagem enquanto exploramos o que são auto-junções, como funcionam e como podemos usá-las em uma tabela SQL.

NOTA: Antes de começarmos, configuraremos uma tabela básica para fins de demonstração. No entanto, você deseja usar qualquer conjunto de dados compatível.



Dados de amostra

As consultas a seguir criam uma tabela básica contendo informações do produto e inserem os registros de amostra na tabela. Isso nos permite demonstrar como trabalhar com auto-junções em SQL.

CRIAR TABELA Produtos (
product_id INT CHAVE PRIMÁRIA,
nome_do_produto VARCHAR(255) NÃO NULO,
parent_id INT
);

Adicione 10 registros de amostra à tabela.

INSERT INTO Produtos (product_id, product_name, parent_id) VALORES
(1, 'Eletrônica', NULO),
(2, 'Smartphones', 1),
(3, 'Laptops', 1),
(4, 'iPhone 13', 2),
(5, 'Samsung Galaxy S21', 2),
(6, 'MacBook Pro', 3),
(7, 'DellXPS 15', 3),
(8, 'Acessórios', NULO),
(9, 'Capas de telefone', 8),
(10, 'Bolsas para laptop', 8);

A tabela resultante é a seguinte:

Exemplo 1: Auto-associação básica

Vamos começar com uma auto-junção básica. Por exemplo, podemos usar uma autojunção simples para recuperar o relacionamento pai-filho da mesma tabela.

Por exemplo, podemos usá-lo para encontrar todos os produtos e seus produtos parentais correspondentes. Podemos executar uma consulta da seguinte maneira:

SELECIONE c.nome_do_produto AS produto_filho, p.nome_do_produto AS produto_pai
DE Produtos c
LEFT JOIN Produtos p ON c.parent_id = p.product_id;

Na consulta de exemplo fornecida, usamos “c” como alias para a tabela de produtos que representa os produtos filhos.

Também criamos o alias “p” para a tabela de produtos para representar os produtos pais.

Na próxima etapa, usamos um SQL LEFT JOIN básico para garantir que os produtos de nível superior sejam incluídos no resultado.

Por último, usamos a cláusula ON para criar um relacionamento entre os registros filho e pai usando as colunas “parent_id” e “product_id”.

A tabela resultante é a seguinte:

Você notará que os produtos pais não possuem um link superior, pois estão no topo da hierarquia, também conhecidos como elementos raiz.

Exemplo 2: buscar dados hierárquicos

Uma das funções mais fundamentais de uma autojunção é recuperar dados hierárquicos. Por exemplo, suponha que queiramos recuperar todos os produtos filhos onde o produto é igual a “Acessórios”. Podemos executar a consulta usando uma auto-junção da seguinte maneira:

SELECIONE c.product_name AS filho_produto
DE Produtos c
JOIN Produtos p ON c.parent_id = p.product_id
WHERE p.product_name = 'Acessórios';

Neste caso, usamos um JOIN para combinar a tabela de produtos consigo mesma e depois usamos a cláusula WHERE para filtrar os resultados que desejamos.

Conclusão

Neste tutorial, exploramos o que é self-join, como funciona e como podemos usá-lo na tabela SQL para recuperar dados hierárquicos ou realizar consultas recursivas.