SQLite União: Natural Esquerda Externa, Interna, Cruzada com Tabelas Exemplo
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, abra “sqlite3.exe":
Passo 2) Abra o banco de dados “TutoriaisSampleDB.db”pelo 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 “Estudantes"E"Departamentos” com 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
- O INNER JOIN produz os registros de ambos - os alunos e as tabelas do departamento que correspondem à condição que é “Students.DepartmentId = Departamentos.DepartmentId “. As linhas sem correspondência serão ignoradas e não incluídas no resultado.
- É por isso que apenas 8 alunos de 10 alunos retornaram desta consulta nos departamentos de TI, matemática e física. 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 de departamentos. Como segue:
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.. USANDO:
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 é como “tabela1 JOIN tabela2 USING (cola)”.
Exemplo
No exemplo a seguir, uniremos as duas tabelas “Estudantes"E"Departamentos” com 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 Alunos.DepartmentId = Departamentos.DepartmentId“. Acabamos de escrever “USANDO(DepartamentoId)".
- 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 INNER JOIN, você deve especificar uma condição de junção que a junção interna usa para unir as duas tabelas. Enquanto na junção natural, você não escreve uma condição de junção. Você apenas escreve os nomes das duas tabelas sem qualquer condição. Em seguida, a junção natural testará automaticamente a igualdade entre os valores de cada coluna existente em ambas as tabelas. A junção natural 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 em INNER JOIN). Nem precisamos escrever o nome da coluna uma vez (como fizemos em 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 fornecerá exatamente a mesma saída que obtivemos dos exemplos INNER JOIN e JOIN USING. Porque em nosso exemplo todas as três consultas são equivalentes. Mas, em alguns casos, a saída será diferente da junção interna e da junção natural. Por exemplo, se houver mais tabelas com os mesmos nomes, a junção natural combinará todas as colunas entre si. No entanto, a junção interna corresponderá apenas às colunas na condição de junção (mais detalhes na próxima seção; a diferença entre a junção interna e a junção natural).
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 que você selecionar na tabela esquerda serão incluídos no resultado do pergunta, portanto, independentemente do valor corresponder ou não à condição de junção, ele será incluído no resultado.
Portanto, se a tabela esquerda tiver 'n' linhas, os resultados da consulta terão 'n' linhas. Porém, para os valores das colunas provenientes da tabela certa, se algum valor que não corresponder à condição de junção 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 último aluno, Jena e George, DepartmentIds não existam na tabela Departamentos, eles também serão incluídos.
- E nesses casos, o valor DepartmentName para Jena e George será “nulo” porque a tabela de departamentos não possui um DepartmentName que corresponda ao valor DepartmentId.
Vamos dar à consulta anterior usando a junção esquerda uma explicação mais profunda usando diagramas de Van:
O LEFT JOIN fornecerá nomes a todos os alunos da tabela de alunos, mesmo que o aluno tenha um ID de departamento que não existe na tabela de departamentos. Portanto, a consulta não fornecerá apenas as linhas correspondentes como INNER JOIN, mas fornecerá a parte extra que contém as linhas incompatíveis da tabela esquerda, que é a tabela dos 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.
Ao contrário de INNER JOIN e LEFT OUTER JOIN, com CROSS JOIN, você não precisa especificar uma condição de junção, porque SQLite não precisa disso para o CROSS JOIN.
A SQLite resultará em resultados lógicos definidos pela combinação de 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). O colA contém dois valores (1,2) e o 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 o cross join, não especificamos nenhuma condição de join, apenas as duas tabelas combinadas com 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 para os Quatro departamentos da tabela de departamentos corresponderam ao segundo aluno John.
- Quatro valores para os Quatro departamentos da tabela de departamentos corresponderam ao terceiro aluno Jack… e assim por diante.
Resumo
utilização SQLite Consulta JOIN, você pode vincular uma ou mais tabelas ou subconsultas para selecionar colunas de ambas as tabelas ou subconsultas.