Fala galera do mundo dos dados, o tema de hoje é como agrupar tabelas com SQL. Esse é o ponto, que deixa muita gente de cabelo em pé, é aqui que vamos entender e praticar os famosos Joins (left, right, inner e full). Dessa forma conseguimos juntar várias tabelas a partir de uma coluna em comum entre elas. De quebra iremos aprender também como realizar os comandos SQL de Union, intersect, e except. Com eles também conseguimos juntar várias tabelas mas de outras formas.
Precisamos da estrutura básica de bases de dados e tabelas com dados para esta etapa. Com toda a estrutura pronta, conseguimos realizar os agrupamentos de tabelas com SQL, por isso vamos criar algumas tabelas e inserir dados nelas, bem simples para ficar didático. Partiu prática com dados ao cubo!
Criar Base de Dados
Primeiramente, vamos montar uma base de dados didática para que fique fácil entendimento das funções de agrupamento de tabelas com SQL. Serão três tabelas: tabela_a, tabela_b e tabela_c. Confere os scripts para criação de cada uma delas a seguir.
Criar Base de Dados Tabela A
Aqui temos o comando SQL para criar nossa tabela_a com as devidas colunas.
CREATE TABLE tabela_a ( id_aluno INTEGER, nm_aluno VARCHAR, id_uf INTEGER );
Agora temos o comando SQL que vai inserir os dados na nossa tabela_a.
INSERT INTO tabela_a VALUES (1,'Joana',1), (2,'Priscila',9), (3,'José',3), (4,'Maria',4), (5,'Paula',8), (6,'Paulo',8);
E então, um comando SQL para a seleção dos dados de forma que possamos verificar se tudo ocorreu certinho.
SELECT * FROM tabela_a
Dessa forma, temos a imagem dos dados abaixo.
Tabela A criada, vamos para a próxima.
Criar Base de Dados Tabela B
Aqui temos o comando SQL para criar nossa tabela_b com as devidas colunas.
CREATE TABLE tabela_b ( id_uf INTEGER, nm_uf VARCHAR );
Agora temos o comando SQL que vai inserir os dados na nossa tabela_b.
INSERT INTO tabela_b VALUES (1,'BA'), (2,'CE'), (3,'SP'), (4,'PE'), (5,'RJ'), (6,'SC');
E então, um comando SQL para a seleção dos dados de forma que possamos verificar se tudo ocorreu certinho.
SELECT * FROM tabela_b
Dessa forma, temos a imagem dos dados abaixo.
Tabela B criada, vamos para a última.
Criar Base de Dados Tabela C
Aqui temos o comando SQL para criar nossa tabela_c com as devidas colunas.
CREATE TABLE tabela_c ( id_aluno INTEGER, nm_aluno VARCHAR, id_uf INTEGER );
Agora temos o comando SQL que vai inserir os dados na nossa tabela_c.
INSERT INTO tabela_c VALUES (1,'Joana',1), (7,'Gustavo',1), (8,'Giovana',3);
E então, um comando SQL para a seleção dos dados de forma que possamos verificar se tudo ocorreu certinho.
SELECT * FROM tabela_c
Dessa forma, temos a imagem dos dados abaixo.
Tabelas criadas, vamos ao que interessa, os joins!
Join de Tabelas com SQL
Com os famosos Joins (left, right, inner e full), conseguimos juntar várias tabelas a partir de uma coluna em comum entre elas. Veremos no detalhe cada um deles a seguir.
Left Join SQL
Às vezes, queremos todas as informações da tabela da esquerda e as correspondentes da tabela da direita, mesmo que não haja correspondência. Na imagem abaixo já temos o resultado esperado para consulta SQL.
Então, a partir de um SELECT, utilizamos o comando LEFT JOIN informando qual será a tabela de ligação e as colunas em comum entre as duas tabelas.
SELECT * FROM tabela_a ta LEFT JOIN tabela_b tb ON ta.id_uf = tb.id_uf ORDER BY id_aluno
Dessa forma, temos resultado da consulta SQL acima na imagem abaixo, exatamente como a imagem inicial esperada.
Próximo join, o da direita.
Right Join SQL
Às vezes, queremos todas as informações da tabela da direita e as correspondentes da tabela da esquerda, mesmo que não haja correspondência. Também temos uma imagem abaixo com o resultado esperado para consulta SQL.
Mais uma vez começamos SELECT, agora utilizamos o comando RIGHT JOIN informando qual será a tabela de ligação e as colunas em comum entre as duas tabelas.
SELECT * FROM tabela_a ta RIGHT JOIN tabela_b tb ON ta.id_uf = tb.id_uf ORDER BY tb.id_uf
Dessa forma, temos resultado da consulta SQL acima na imagem abaixo, exatamente como a imagem inicial esperada.
Agora o inner join.
Inner Join SQL
O INNER JOIN é como conectar peças de um quebra-cabeça. Vamos aprender a unir tabelas onde há correspondência. A imagem abaixo é o resultado esperado para consulta SQL.
A partir de um SELECT, utilizamos o comando INNER JOIN informando qual será a tabela de ligação e as colunas em comum entre as duas tabelas.
SELECT * FROM tabela_a ta INNER JOIN tabela_b tb ON ta.id_uf = tb.id_uf ORDER BY id_aluno
Dessa forma, temos resultado da consulta SQL acima na imagem abaixo, exatamente como a imagem inicial esperada.
Completando a lista, o full!
Full Join SQL
Às vezes, queremos todas as informações da tabela da esquerda e da tabela da direita, mesmo que não haja correspondência. Então usamos o FULL JOIN! A imagem abaixo é o que esperamos da consulta SQL.
Começamos do SELECT, utilizamos o comando FULL JOIN informando qual será a tabela de ligação e as colunas em comum entre as duas tabelas.
SELECT * FROM tabela_a ta FULL JOIN tabela_b tb ON ta.id_uf = tb.id_uf ORDER BY ta.id_aluno, tb.id_uf
Dessa forma, temos resultado da consulta SQL acima na imagem abaixo, exatamente como a imagem inicial esperada.
Depois de aprender os joins, é hora de aprender a união de tabelas.
União de Tabelas com SQL
A união de tabelas, acontece a partir da junção dos registros de mais de uma tabela E para isso é preciso que as tabelas tenham a mesma quantidade de colunas e os tipos de dados correspondentes.
Union SQL
Se você tem dados em diferentes tabelas e deseja uma lista única, o UNION é o aliado perfeito. Podemos utilizar ele de duas formas, com ou sem registros duplicados.
Esta primeira consulta SQL do UNION, vai exibir apenas os registros únicos da união entre as tabelas_a e tabela_c.
SELECT * FROM tabela_a ta -- 6 registro UNION SELECT * FROM tabela_c tc -- 3 registros ORDER BY id_aluno
Dessa forma, temos o resultado da imagem abaixo com apenas oito registros.
Para trazer todos os registros das duas tabelas, Independente de dados duplicados, acrescentamos a condição ALL. Dessa forma, será exibido todos os registros das duas tabelas após a união
SELECT * FROM tabela_a ta -- 6 registro UNION ALL SELECT * FROM tabela_c tc -- 3 registros ORDER BY id_aluno
Observe na imagem abaixo, que agora estamos exibindo os nove registros e as duas primeiras linhas temos registros duplicados.
Agora vamos de intercessão.
Intersect SQL
O comando INTERSECT tem a missão de exibir apenas os registros duplicados, ou seja, são os registros que estão presentes nas tabelas_a e tabela_c.
SELECT * FROM tabela_a ta INTERSECT SELECT * FROM tabela_c tc
Confere o resultado do script SQL acima na imagem abaixo.
E para fechar vamos de exceção.
Except SQL
Já o comando é Sept, tem o objetivo de exibir os valores únicos da união de duas tabelas. Olhando para o código SQL abaixo, seria algo do tipo os registros únicos da tabela_a que não estão presentes na tabela_c.
SELECT * FROM tabela_a ta EXCEPT SELECT * FROM tabela_c tc ORDER BY id_aluno
Confere o resultado do script SQL acima na imagem abaixo.
Atenção!!! A ordem das tabelas altera a exibição, e podemos ter os registros únicos da tabela_c que não estão presentes na tabela_a.
SELECT * FROM tabela_c tc EXCEPT SELECT * FROM tabela_a ta ORDER BY id_aluno
Confere o resultado do script SQL acima na imagem abaixo.
E assim fechamos mais um conteúdo de SQL na prática hoje aprendendo sobre os agrupamentos de dados.
Agrupar de Dados ao Cubo
E então chegamos ao fim! Aprendemos a agrupar tabelas com SQL, com este passo a passo bem detalhado. Assim podemos avançar na série SQL na prática! Na sequência você vai aprender a consultar banco de dados com SQL. Um abraço e até a próxima, não esquece de compartilhar o conteúdo para aquele amigo que quer aprender a linguagem SQL na prática.
Conteúdos ao Cubo
Então, se você curtiu o conteúdo, aqui no Dados ao Cubo tem muito mais. Então, deixo algumas sugestões de conteúdos que você pode encontrar. Sempre falando sobre o mundo dos dados!
- Bibliotecas Para Visualização de Dados em Python
- Visualização de Dados com Matplotlib Python
- Visualização de Dados com Seaborn Python
- Visualização de Dados com Plotly Python
- Visualização de Dados com Bokeh Python
- Visualização de Dados com Altair Python
- Visualizar Dados do Snowflake no Metabase
- Visualizar Dados do PostgreSQL no Metabase
Para finalizar, se torne também Parceiro de Publicação Dados ao Cubo. Escreva o próximo artigo e compartilhe conhecimento para toda a comunidade de dados.
Apaixonado por dados e tecnologia ❤️ , criando soluções com dados 📊 📈 , desde 2015, sempre buscando tornar os processos orientados! Com formação em Engenharia da Computação 💾 , MBA Gestão da Informação e Business Intelligence e Especialização em Data Science.
Também atuo como professor na área de dados. Nas horas vagas crio modelos de Machine Learning 🤖 com Python em desafios do Kaggle e escrevo no Dados ao Cubo sobre o mundo dos dados 🎲 !
Compartilhando conhecimentos sempre 🚀