SQL JOIN: Aprenda INNER, LEFT, RIGHT, FULL e CROSS
Introdução
Na linguagem SQL, executamos diversas consultas para geralmente criar relatórios que serão posteriormente utilizados para análise e a tomada de alguma decisão, e para criarmos consultas cada vez mais completas precisamos utilizar várias tabelas em conjunto e para isso usamos os JOINs.
O que é o comando JOIN e para que serve em SQL?
Uma cláusula JOIN em SQL, correspondente a uma operação de junção em álgebra relacional, combina colunas de uma ou mais tabelas em um banco de dados relacional. Ela cria um conjunto que pode ser salvo como uma tabela ou usado da forma como está.
Um JOIN
é um meio de combinar colunas de uma (auto-junção) ou mais tabelas, usando valores comuns a cada uma delas. O SQL padrão ANSI especifica cinco tipos de JOIN
: INNER JOIN
, LEFT JOIN
, RIGHT JOIN
, FULL JOIN
e CROSS JOIN
.
Como um caso especial, uma tabela (tabela base, visão ou tabela juntada) pode se juntar a si mesma em uma auto-união (self-join).
Em um banco de dados relacional, os dados são distribuídos em várias tabelas lógicas. Para obter um conjunto completo e significativo de dados, é necessário consultar dados dessas tabelas usando junções (JOINs).
Como já foi mencionado acima, existem diferentes tipos de JOINs no SQL. Vamos definir e exemplificar cada um deles.
O que faz o INNER JOIN?
SELECT <select_list>
FROM Tabela A
INNER JOIN Tabela B
ON A.Key = B.Key
A cláusula INNER JOIN compara cada linha da tabela A com as linhas da tabela B para encontrar todos os pares de linhas que satisfazem a condição de junção. Se a condição de junção for avaliado como TRUE
, os valores da coluna das linhas correspondentes das tabelas A e B serão combinados em uma nova linha e incluídos no conjunto de resultados.
LEFT JOIN
Retorna todos os registros da tabela esquerda e os registros correspondentes da tabela direita.
SELECT <select_list>
FROM Tabela A
LEFT JOIN Tabela B
ON A.Key = B.Key
Para cada linha da tabela A, a consulta a compara com todas as linhas da tabela B. Se um par de linhas fizer com que a condição de junção seja avaliado como TRUE
, os valores da coluna dessas linhas serão combinados para formar uma nova linha que será incluída no conjunto de resultados.
Se uma linha da tabela “esquerda” A não tiver nenhuma linha correspondente da tabela “direita” B, a consulta irá combinar os valores da coluna da linha da tabela “esquerda” A com NULL
para cada valor da coluna da tabela da “direita” B que não satisfaça a condição de junto (FALSE
).
Em resumo, a cláusula LEFT JOIN
retorna todas as linhas da tabela “esquerda” A e as linhas correspondentes ou valores NULL
da tabela “esquerda” A.
RIGHT JOIN
Retorna todos os registros da tabela direita e os registros correspondentes da tabela esquerda.
SELECT <select_list>
FROM Tabela A
RIGHT JOIN Tabela B
ON A.Key = B.Key
A RIGHT JOIN
combina dados de duas ou mais tabelas. A RIGHT JOIN
começa a selecionar dados da tabela “direita” B e a corresponder às linhas da tabela “esquerda” A.
A RIGHT JOIN
retorna um conjunto de resultados que inclui todas as linhas da tabela “direita” B, com ou sem linhas correspondentes na tabela “esquerda” A. Se uma linha na tabela direita B não tiver nenhuma linha correspondente da tabela “esquerda” A, a coluna da tabela “esquerda” A no conjunto de resultados será nula igualmente ao que acontece no LEFT JOIN.
FULL JOIN
Retorna todos os registros quando houver uma correspondência na tabela esquerda ou direita.
SELECT <select_list>
FROM Tabela A
FULL JOIN Tabela B
ON A.Key = B.Key
A cláusula FULL JOIN
retorna todas as linhas das tabelas unidas, correspondidas ou não, ou seja, você pode dizer que a FULL JOIN
combina as funções da LEFT JOIN
e da RIGHT JOIN
. FULL JOIN
é um tipo de junção externa, por isso também é chamada junção externa completa.
Quando não existem linhas correspondentes para a linha da tabela esquerda, as colunas da tabela direita serão nulas. Da mesma forma, quando não existem linhas correspondentes para a linha da tabela direita, a coluna da tabela esquerda será nula.
CROSS JOIN
SELECT <select_list>
FROM Tabela A
CROSS JOIN Tabela B
A cláusula CROSS JOIN
retorna todas as linhas das tabelas por cruzamento, ou seja, para cada linha da tabela esquerda queremos todos os linhas da tabelas direita ou vice-versa. Ele também é chamado de produto cartesiano entre duas tabelas. Porém, para isso é preciso que ambas tenham o campo em comum, para que a ligação exista entre as duas tabelas.
Para entender melhor, pense que temos um banco de dado, onde temos uma tabela FUNCIONÁRIO e uma tabela CARGO, assim poderíamos ter vários cargos para um único FUNCIONÁRIO, e usando o CROSS JOIN
podemos trazer todos os CARGOS de todos os FUNCIONÁRIOS.
Conclusão
Vimos que os JOINs na linguagem SQL são muito importantes, eles nos permite criar consultas mais completas e mais complexas de forma simples, utilizando testes lógicos (condição de junção), e são de extrema importância quando trabalhamos com bancos de dados.
Gostou do artigo e quer saber mais sobre SQL e JOINs? A Formação de SQL com MySQL Server da Oracle da Alura vai te ensinar como criar JOINs e muito mais.