Gostaria de saber como diferenciar todas essas junções diferentes ...
Gostaria de saber como diferenciar todas essas junções diferentes ...
Respostas:
Exemplo simples : Digamos que você tenha uma Students
mesa e uma Lockers
mesa. No SQL, a primeira tabela especificada em uma junção ,,Students
é a tabela ESQUERDA , e a segunda Lockers
, é a tabela DIREITA .
Cada aluno pode ser atribuído a um armário, para que haja uma LockerNumber
coluna na Student
tabela. Mais de um aluno pode estar em um único armário, mas especialmente no início do ano letivo, você pode receber alguns alunos sem armários e alguns que não têm alunos designados.
Para fins de exemplo, digamos que você tenha 100 alunos , 70 dos quais com armários. Você tem um total de 50 armários , 40 dos quais com pelo menos 1 aluno e 10 com armários.
INNER JOIN é equivalente a " mostrar-me todos os alunos com armários ".
Todos os alunos sem armários ou armários sem alunos estão ausentes.
Retorna 70 linhas
ESQUERDO OUTER JOIN seria " mostre-me todos os alunos, com o armário correspondente, se eles tiverem um ".
Pode ser uma lista geral de alunos ou pode ser usada para identificar alunos sem armário.
Retorna 100 linhas
A UNIDADE EXTERNA CERTA seria " mostre-me todos os armários e os alunos designados a eles, se houver algum ".
Isso pode ser usado para identificar armários que não tenham alunos designados ou armários que tenham muitos alunos.
Retorna 80 linhas (lista de 70 alunos nos 40 armários, mais os 10 armários sem aluno)
JOIN EXTERNO COMPLETO seria bobo e provavelmente não muito útil.
Algo como " mostre-me todos os alunos e todos os armários e combine-os onde puder "
Retorna 110 linhas (todos os 100 alunos, incluindo aqueles sem armários. Além dos 10 armários sem alunos)
CROSS JOIN também é bastante tolo nesse cenário.
Ele não usa o lockernumber
campo vinculado na tabela de alunos, então você basicamente acaba com uma grande lista gigante de todos os pares possíveis de aluno para cacifo, independentemente de ele existir ou não.
Retorna 5000 linhas (100 alunos x 50 armários). Pode ser útil (com filtragem) como ponto de partida para combinar os novos alunos com os armários vazios.
SELECT * FROM students RIGHT OUTER JOIN lockers...
resultaria em um resultado diferente de SELECT * FROM lockers RIGHT OUTER JOIN students...
. Grande resposta, mas gostaria de vê-lo atualizado com completos SQL
consultas
Existem três tipos básicos de associação:
INNER
join compara duas tabelas e retorna apenas resultados onde existe uma correspondência. Os registros da 1ª tabela são duplicados quando correspondem a vários resultados na 2ª. As junções INNER tendem a tornar os conjuntos de resultados menores, mas como os registros podem ser duplicados, isso não é garantido.CROSS
join compara duas tabelas e retorna todas as combinações possíveis de linhas de ambas as tabelas. Você pode obter muitos resultados desse tipo de associação que podem nem ser significativos, portanto, use com cuidado.OUTER
join compara duas tabelas e retorna dados quando uma correspondência está disponível ou valores NULL caso contrário. Assim como a junção INNER, isso duplicará as linhas em uma tabela quando corresponder a vários registros na outra tabela. As junções OUTER tendem a aumentar os conjuntos de resultados, porque eles próprios não removerão nenhum registro do conjunto. Você também deve qualificar uma associação OUTER para determinar quando e onde adicionar os valores NULL:
LEFT
significa manter todos os registros da 1ª tabela, independentemente do que for, e inserir valores NULL quando a 2ª tabela não corresponder. RIGHT
significa o contrário: mantenha todos os registros da 2ª tabela, não importa o quê, e insira valores NULL quando a 1ª tabela não corresponder. FULL
significa manter todos os registros de ambas as tabelas e inserir um valor NULL em qualquer tabela, se não houver correspondência.Muitas vezes, você vê a OUTER
palavra - chave omitida da sintaxe. Em vez disso, será apenas "LEFT JOIN", "RIGHT JOIN" ou "CHEFE". Isso é feito porque as junções INNER e CROSS não têm significado com relação à ESQUERDA, DIREITA ou CHEIA, e, portanto, são suficientes para indicar inequivocamente uma junção EXTERNA.
Aqui está um exemplo de quando você pode querer usar cada tipo:
INNER
: Você deseja retornar todos os registros da tabela "Fatura", juntamente com os "InvoiceLines" correspondentes. Isso pressupõe que toda fatura válida terá pelo menos uma linha.OUTER
: Você deseja retornar todos os registros "InvoiceLines" para uma fatura específica, juntamente com os registros "InventoryItem" correspondentes. Esse é um negócio que também vende serviço, de forma que nem todos os InvoiceLines tenham um IventoryItem.CROSS
: Você tem uma tabela de dígitos com 10 linhas, cada uma contendo os valores de '0' a '9'. Você deseja criar uma tabela de período para ingressar, para acabar com um registro para cada dia no intervalo. Ao ingressar CROSS nesta tabela consigo mesma repetidamente, você pode criar quantos números consecutivos forem necessários (desde que você comece da 10ª à 1ª potência, cada junção adiciona 1 ao expoente). Em seguida, use a função DATEADD () para adicionar esses valores à sua data base para o intervalo.Existem apenas 4 tipos:
NULL
cada valor na tabela à direita. Isso significa que todas as linhas da tabela à esquerda aparecerão pelo menos uma vez na saída. Uma "junção cruzada" ou "junção cartesiana" é simplesmente uma junção interna para a qual nenhuma condição de junção foi especificada, resultando na saída de todos os pares de linhas.
Agradeço a RusselH por apontar junções COMPLETAS, que eu havia omitido.
Diferença SQL JOINS:
Muito simples de lembrar:
INNER JOIN
mostra apenas registros comuns a ambas as tabelas.
OUTER JOIN
todo o conteúdo de ambas as tabelas é mesclado, correspondendo ou não.
LEFT JOIN
é igual a LEFT OUTER JOIN
- (selecione registros da primeira tabela (mais à esquerda) com os registros correspondentes da tabela à direita).
RIGHT JOIN
é igual a RIGHT OUTER JOIN
- (selecione registros da segunda tabela (mais à direita) com os registros correspondentes da tabela esquerda).
Confira Join (SQL) na Wikipedia
junção esquerda / direita (externa) - Dadas duas tabelas retornam todas as linhas existentes na tabela esquerda ou direita da sua junção, mais as linhas do outro lado serão retornadas quando a cláusula de junção for uma correspondência ou nulo será retornado para essas colunas
Exterior completo - Dadas duas tabelas retorna todas as linhas e retornará nulos quando a coluna esquerda ou direita não estiver lá
Junções cruzadas - junção cartesiana e pode ser perigoso se não for usado com cuidado
Tornar mais visível pode ajudar. Um exemplo:
Tabela 1:
ID_STUDENT STUDENT_NAME
1 Raony
2 Diogo
3 Eduardo
4 Luiz
Mesa 2:
ID_STUDENT LOCKER
3 l1
4 l2
5 l3
O que recebo quando faço:
-Inner join of Table 1 and Table 2:
- Inner join returns both tables merged only when the key
(ID_STUDENT) exists in both tables
ID_STUDENT STUDENT_NAME LOCKER
3 Eduardo l1
4 Luiz l2
-Left join of Table 1 and Table 2:
- Left join merges both tables with all records form table 1, in
other words, there might be non-populated fields from table 2
ID_ESTUDANTE NOME_ESTUDANTE LOCKER
1 Raony -
2 Diogo -
3 Eduardo l1
4 Luiz l2
-Right join of table 1 and table 2:
- Right join merges both tables with all records from table 2, in
other words, there might be non-populated fields from table 1
ID_STUDENT STUDENT_NAME LOCKER
3 Eduardo l1
4 Luiz l2
5 - l3
-Outter join of table 1 and table 2:
- Returns all records from both tables, in other words, there
might be non-populated fields either from table 1 or 2.
ID_STUDENT STUDENT_NAME LOCKER
1 Raony -
2 Diogo -
3 Eduardo l1
4 Luiz l2
5 - l3
LEFT JOIN
e RIGHT JOIN
são tipos de OUTER JOIN
s.
INNER JOIN
é o padrão - as linhas de ambas as tabelas devem corresponder à condição de junção.
Junção interna : mostra apenas linhas, quando possui dados de ambas as tabelas.
Junção externa : (esquerda / direita) : Mostrar a todos resultam da / direita esquerda mesa com a linha emparelhado ( s ), se ele existe ou não.
No começo você precisa entender o que a junção faz? Conectamos várias tabelas e obtemos resultados específicos das tabelas unidas. A maneira mais simples de fazer isso é a junção cruzada .
Digamos que a tabela A tenha duas colunas A e B. E a tabela B tenha três colunas C e D. Se aplicarmos a junção cruzada, ela produzirá muitas linhas sem sentido. Então temos que combinar usando a chave primária para obter dados reais.
Esquerda: retornará todos os registros da tabela esquerda e os registros correspondentes da tabela direita.
Direita: retornará oposto à junção esquerda. Ele retornará todos os registros da tabela direita e os registros correspondentes da tabela esquerda.
Interior: É como um cruzamento. Ele retornará apenas registros correspondentes de ambas as tabelas.
Exterior: E isso é como união. Ele retornará todos os registros disponíveis das duas tabelas.
Às vezes, não precisamos de todos os dados e também precisamos apenas de dados ou registros comuns. podemos obtê-lo facilmente usando esses métodos de junção. Lembre-se de que a junção esquerda e direita também são junções externas.
Você pode obter todos os registros usando a junção cruzada. Mas pode ser caro quando se trata de milhões de registros. Portanto, simplifique usando a junção esquerda, direita, interna ou externa.
obrigado