SQLite Junção: Natural Esquerda Externa, Interna, Cruz com Tabelas
⚡ Resumo Inteligente
SQLite As cláusulas JOIN combinam linhas de duas ou mais tabelas usando INNER JOIN, JOIN USING, NATURAL JOIN, LEFT OUTER JOIN e CROSS JOIN, permitindo que você encontre registros relacionados por meio de colunas compartilhadas e leia dados em um banco de dados normalizado.

SQLite suporta diferentes tipos de SQL Junções, como INNER JOIN, LEFT OUTER JOIN e CROSS JOIN. Cada tipo de JOIN é utilizado para uma situação diferente como veremos neste tutorial.
Introduction to SQLite Cláusula JUNTE-SE
Ao trabalhar em um banco de dados com diversas tabelas, muitas vezes você precisa obter dados dessas diversas tabelas.
Com a cláusula JOIN, você pode vincular duas ou mais tabelas ou subconsultas juntando-as. Além disso, você pode definir por qual coluna deseja vincular as tabelas e por quais condições.
Qualquer cláusula JOIN deve ter a seguinte sintaxe:
Cada cláusula de junção contém:
- Uma tabela ou subconsulta que é a tabela da esquerda; a tabela ou a subconsulta antes da cláusula join (à esquerda dela).
- Operador JOIN – especifique o tipo de junção (INNER JOIN, LEFT OUTER JOIN ou CROSS JOIN).
- Restrição JOIN – depois de especificar as tabelas ou subconsultas a serem unidas, você precisa especificar uma restrição de junção, que será uma condição na qual as linhas correspondentes que correspondem a essa condição serão selecionadas dependendo do tipo de junção.
Note que, para todos os seguintes SQLite Exemplos de tabelas JOIN, você tem que executar o sqlite3.exe e abrir uma conexão com o banco de dados de exemplo como segue:
Passo 1) Nesta etapa, abra Meu Computador e navegue até o seguinte diretório: “C:\sqlite” e, em seguida, execute o arquivo “sqlite3.exe”:
Passo 2) Abra o banco de dados “TutorialsSampleDB.db” com o seguinte comando:
Agora você está pronto para executar qualquer tipo de consulta no banco de dados.
SQLite INNER JOIN
O INNER JOIN retorna apenas as linhas que correspondem à condição de junção e elimina todas as outras linhas que não correspondem à condição de junção.
Exemplo
No exemplo a seguir, uniremos as duas tabelas “Alunos” e “Departamentos” usando o DepartmentId para obter o nome do departamento de cada aluno, da seguinte forma:
SELECT Students.StudentName, Departments.DepartmentName FROM Students INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;
Explicação do código
O INNER JOIN funciona da seguinte forma:
- Na cláusula Select, você pode selecionar as colunas que deseja selecionar nas duas tabelas referenciadas.
- A cláusula INNER JOIN é escrita após a primeira tabela referenciada pela cláusula “From”.
- Então a condição de junção é especificada com ON.
- Aliases podem ser especificados para tabelas referenciadas.
- A palavra INNER é opcional, você pode simplesmente escrever JOIN.
saída
A junção interna (INNER JOIN) retorna os registros de ambas as tabelas – alunos e departamentos – que correspondem à condição “Students.DepartmentId = Departments.DepartmentId”. As linhas que não correspondem serão ignoradas e não incluídas no resultado.
Por isso, apenas 8 dos 10 alunos dos departamentos de TI, matemática e física foram retornados nesta consulta. Já os alunos "Jena" e "George" não foram incluídos, pois possuem um ID de departamento nulo, que não corresponde à coluna departmentId da tabela departments. Veja a seguir:
SQLite JUNTE-SE… USANDO
O INNER JOIN pode ser escrito usando a cláusula “USING” para evitar redundância, então em vez de escrever “ON Students.DepartmentId = Departments.DepartmentId”, você pode simplesmente escrever “USING(DepartmentID)”.
Você pode usar “JOIN .. USING” sempre que as colunas que você irá comparar na condição de junção tiverem o mesmo nome. Nesses casos, não há necessidade de repeti-los usando a condição on e apenas indicar os nomes das colunas e SQLite detectará isso.
A diferença entre INNER JOIN e JOIN .. USING:
Com “JOIN … USING”, você não escreve uma condição de junção, apenas escreve a coluna de junção que é comum entre as duas tabelas unidas. Em vez de escrever tabela1 “INNER JOIN tabela2 ON tabela1.cola = tabela2.cola”, escrevemos assim: “tabela1 JOIN tabela2 USING(cola)”.
Exemplo
No exemplo a seguir, uniremos as duas tabelas “Alunos” e “Departamentos” usando o DepartmentId para obter o nome do departamento de cada aluno, da seguinte forma:
SELECT Students.StudentName, Departments.DepartmentName FROM Students INNER JOIN Departments USING(DepartmentId);
Explicação
- Ao contrário do exemplo anterior, não escrevemos “ON Students.DepartmentId = Departments.DepartmentId”. Escrevemos apenas “USING(DepartmentId)”.
- SQLite infere a condição de junção automaticamente e compara o DepartmentId de ambas as tabelas – Alunos e Departamentos.
- Você pode usar esta sintaxe sempre que as duas colunas que você está comparando tiverem o mesmo nome.
saída
Isso lhe dará exatamente o mesmo resultado do exemplo anterior:
SQLite UNIÃO NATURAL
Um NATURAL JOIN é semelhante a um JOIN…USING, a diferença é que ele testa automaticamente a igualdade entre os valores de cada coluna que existe em ambas as tabelas.
A diferença entre INNER JOIN e NATURAL JOIN:
- Em um INNER JOIN, você precisa especificar uma condição de junção que o INNER JOIN utiliza para unir as duas tabelas. Já em um NATURAL JOIN, você não precisa escrever uma condição de junção. Basta inserir os nomes das duas tabelas sem nenhuma condição. O NATURAL JOIN, então, verifica automaticamente a igualdade entre os valores de cada coluna existente em ambas as tabelas. O NATURAL JOIN infere a condição de junção automaticamente.
- No NATURAL JOIN, todas as colunas de ambas as tabelas com o mesmo nome serão comparadas entre si. Por exemplo, se tivermos duas tabelas com dois nomes de colunas em comum (as duas colunas existem com o mesmo nome nas duas tabelas), então a junção natural unirá as duas tabelas comparando os valores de ambas as colunas e não apenas de uma. coluna.
Exemplo
SELECT Students.StudentName, Departments.DepartmentName FROM Students Natural JOIN Departments;
Explicação
- Não precisamos escrever uma condição de junção com nomes de colunas (como fizemos no INNER JOIN). Nem sequer precisamos escrever o nome da coluna uma única vez (como fizemos no JOIN USING).
- A junção natural examinará ambas as colunas das duas tabelas. Ele detectará que a condição deve ser composta pela comparação de DepartmentId das duas tabelas Alunos e Departamentos.
saída
O NATURAL JOIN produzirá exatamente o mesmo resultado que o obtido com o INNER JOIN e o JOIN USING, pois, em nosso exemplo, as três consultas são equivalentes. No entanto, em alguns casos, o resultado do INNER JOIN será diferente do resultado do NATURAL JOIN. Por exemplo, se houver mais de uma tabela com o mesmo nome, o NATURAL JOIN comparará todas as colunas entre si. Já o INNER JOIN comparará apenas as colunas especificadas na condição de junção.
SQLite JUNÇÃO EXTERNA ESQUERDA
O padrão SQL define três tipos de OUTER JOINs: LEFT, RIGHT e FULL, mas SQLite suporta apenas o LEFT OUTER JOIN natural.
Em LEFT OUTER JOIN, todos os valores das colunas selecionadas da tabela à esquerda serão incluídos no resultado da consulta; portanto, independentemente de o valor corresponder ou não à condição de junção, ele será incluído no resultado.
Portanto, se a tabela da esquerda tiver 'n' linhas, os resultados da consulta também terão 'n' linhas. No entanto, para os valores das colunas provenientes da tabela da direita, se algum valor não corresponder à condição de junção, ele conterá um valor "nulo".
Assim, você obterá um número de linhas equivalente ao número de linhas na junção esquerda. Assim, você obterá as linhas correspondentes de ambas as tabelas (como os resultados do INNER JOIN), além das linhas não correspondentes da tabela esquerda.
Exemplo
No exemplo a seguir, tentaremos o “LEFT JOIN” para unir as duas tabelas “Alunos” e “Departamentos”:
SELECT Students.StudentName, Departments.DepartmentName FROM Students -- this is the left table LEFT JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;
Explicação
- SQLite A sintaxe LEFT JOIN é igual a INNER JOIN; você escreve LEFT JOIN entre as duas tabelas e então a condição de junção vem após a cláusula ON.
- A primeira tabela após a cláusula from é a tabela da esquerda. Considerando que a segunda tabela especificada após o LEFT JOIN natural é a tabela certa.
- A cláusula OUTER é opcional; LEFT natural OUTER JOIN é o mesmo que LEFT JOIN.
saída
Como você pode ver, todas as linhas da tabela de alunos estão incluídas, totalizando 10 alunos. Mesmo que o quarto e o último aluno, Jena e George, tenham IDs de departamento que não existem na tabela de Departamentos, eles também estão incluídos.
Nesses casos, o valor de departmentName para Jena e George será "nulo", pois a tabela departments não possui um departmentName que corresponda ao valor de departmentId deles.
Vamos explicar mais detalhadamente a consulta anterior, que utiliza a junção à esquerda (left join), por meio de diagramas de Venn:
O LEFT JOIN retornará todos os nomes dos alunos da tabela de alunos, mesmo que o aluno tenha um ID de departamento que não exista na tabela de departamentos. Portanto, a consulta não retornará apenas as linhas correspondentes como o INNER JOIN, mas também as linhas não correspondentes da tabela à esquerda, que é a tabela de alunos.
Observe que qualquer nome de aluno que não tenha departamento correspondente terá um valor “nulo” para o nome do departamento, porque não há valor correspondente para ele e esses valores são os valores nas linhas não correspondentes.
SQLite JUNÇÃO CRUZADA
Um CROSS JOIN fornece o produto cartesiano para as colunas selecionadas das duas tabelas unidas, combinando todos os valores da primeira tabela com todos os valores da segunda tabela.
Portanto, para cada valor na primeira tabela, você obterá 'n' correspondências da segunda tabela, onde n é o número de linhas da segunda tabela.
Diferentemente do INNER JOIN e do LEFT OUTER JOIN, com o CROSS JOIN você não precisa especificar uma condição de junção, porque SQLite Não é necessário para a junção cruzada.
O SQLite resultará em um conjunto de resultados lógicos, combinando todos os valores da primeira tabela com todos os valores da segunda tabela.
Por exemplo, se você selecionou uma coluna da primeira tabela (colA) e outra coluna da segunda tabela (colB). A colA contém dois valores (1,2) e a colB também contém dois valores (3,4).
Então o resultado do CROSS JOIN será de quatro linhas:
- Duas linhas combinando o primeiro valor de colA que é 1 com os dois valores de colB (3,4) que serão (1,3), (1,4).
- Da mesma forma, duas linhas combinando o segundo valor de colA que é 2 com os dois valores de colB (3,4) que são (2,3), (2,4).
Exemplo
Na consulta a seguir tentaremos CROSS JOIN entre as tabelas Alunos e Departamentos:
SELECT Students.StudentName, Departments.DepartmentName FROM Students CROSS JOIN Departments;
Explicação
- De acordo com o relatório SQLite selecione em várias tabelas, apenas selecionamos duas colunas “studentname” da tabela de alunos e “departmentName” da tabela de departamentos.
- Para a junção cruzada, não especificamos nenhuma condição de junção, apenas combinamos as duas tabelas com um CROSS JOIN no meio delas.
saída
Como você pode ver, o resultado são 40 linhas; 10 valores da tabela de alunos correspondem aos 4 departamentos da tabela de departamentos. Como segue:
- Quatro valores para os quatro departamentos da tabela de departamentos corresponderam ao primeiro aluno Michel.
- Quatro valores dos quatro departamentos da tabela de departamentos coincidiram com o segundo aluno, John.
- Quatro valores para os quatro departamentos da tabela de departamentos coincidiram com o terceiro aluno, Jack… e assim por diante.











