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.

  • 🔗 Cláusula de junção: A cláusula JOIN vincula duas ou mais tabelas ou subconsultas em uma coluna compartilhada, definida com uma condição ON ou USING.
  • 🎯 JUNÇÃO INTERNA: A operação INNER JOIN retorna apenas as linhas em que a condição de junção corresponde em ambas as tabelas, descartando as linhas que não correspondem.
  • 🧩 USANDO e NATURAL: JOIN USING nomeia uma coluna em comum, enquanto NATURAL JOIN identifica automaticamente todas as colunas com o mesmo nome.
  • ↩️ JUNÇÃO EXTERNA ESQUERDA: LEFT OUTER JOIN mantém todas as linhas da tabela da esquerda e preenche as colunas não correspondentes da tabela da direita com valores NULL.
  • ✖️ JUNÇÃO CRUZADA: A operação CROSS JOIN retorna o produto cartesiano, emparelhando cada linha da tabela da esquerda com cada linha da tabela da direita.
  • 🤖 Assistência de IA: Ferramentas de IA de texto para SQL e GitHub Copilot geram SQLite Consultas JOIN a partir de instruções em linguagem natural.

SQLite Junte-se

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:

SQLite Sintaxe da cláusula JOIN

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”:

Abra o arquivo sqlite3.exe no diretório sqlite.

Passo 2) Abra o banco de dados “TutorialsSampleDB.db” com o seguinte comando:

Abra o banco de dados TutorialsSampleDB

Agora você está pronto para executar qualquer tipo de consulta no banco de dados.

SQLite INNER JOIN

SQLite Diagrama de Venn de junção interna

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.

SQLite Exemplo de resultado de INNER JOIN

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 INNER JOIN linhas correspondentes

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 JUNTAR USANDO resultado de exemplo

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 Exemplo de resultado de NATURAL JOIN

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.

SQLite Exemplo de resultado de LEFT OUTER JOIN

Vamos explicar mais detalhadamente a consulta anterior, que utiliza a junção à esquerda (left join), por meio de diagramas de Venn:

SQLite JUNÇÃO EXTERNA ESQUERDA Diagrama 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.

SQLite Exemplo de resultado de junção cruzada

Perguntas Frequentes

SQLite Adicionamos suporte a RIGHT JOIN e FULL OUTER JOIN na versão 3.39.0, lançada em 2022. Em versões anteriores, você emula um RIGHT JOIN por meio de troca de parâmetros.ping as tabelas em um LEFT JOIN e um FULL OUTER JOIN combinando dois LEFT JOINs com UNION.

Uma auto-junção une uma tabela a si mesma usando aliases de tabela, de modo que uma cópia atua como a tabela da esquerda e outra como a da direita. É útil para comparar linhas dentro da mesma tabela, como por exemplo, associar funcionários aos seus respectivos gerentes.

Sim. Você encadeia várias cláusulas JOIN em um único SELECT, cada uma com sua própria condição ON ou USING, por exemplo, FROM A JOIN B ON … JOIN C ON …. SQLite une as tabelas da esquerda para a direita em um conjunto de resultados combinado.

Escrever apenas JOIN é o mesmo que INNER JOIN em SQLiteAmbas as operações mantêm apenas as linhas que satisfazem a condição ON ou USING, de modo que as linhas sem correspondência são descartadas. A palavra-chave INNER é opcional, tornando JOIN e INNER JOIN intercambiáveis.

Criar um índice nas colunas usadas na condição de junção permite SQLite A função `match` permite encontrar linhas sem precisar examinar tabelas inteiras, o que acelera as junções em grandes conjuntos de dados. A indexação de colunas de chave estrangeira e a execução do comando `ANALYZE` para atualizar as estatísticas melhoram ainda mais o desempenho das consultas de junção.

Um INNER JOIN retorna apenas as linhas que correspondem em ambas as tabelas. Um LEFT OUTER JOIN retorna todas as linhas da tabela da esquerda mais as linhas correspondentes da tabela da direita, preenchendo as colunas da direita que não correspondem com NULL. Portanto, um LEFT JOIN nunca descarta linhas da tabela da esquerda.

Sim. Assistentes de IA que convertem texto em SQL transformam solicitações em linguagem natural em SQLite Instruções INNER, LEFT, NATURAL e CROSS JOIN. Fornecer os nomes das tabelas, colunas e seus relacionamentos melhora a precisão, e cada junção gerada deve ser revisada e testada antes de ser aplicada a dados reais.

Copiloto do GitHub sugere SQLite Consultas JOIN embutidas em editores como VS Code, completando as cláusulas INNER JOIN, LEFT JOIN e ON ou USING. Ele lê o esquema e os comentários próximos, de modo que suas sugestões reutilizem os nomes reais de suas tabelas e colunas.

Resuma esta postagem com: