Diferença entre junit à esquerda e junit à direita no SQL Server

Eu sei sobre junções no SQL Server.

Por exemplo. há duas tabelas Table1, Table2.

Há estrutura de tabela estão seguindo.

create table Table1 (id int, Name varchar (10)) create table Table2 (id int, Name varchar (10)) 

Tabela1 Dados da seguinte forma:

  Id Name ------------- 1 A 2 B 

Tabela2 Dados da seguinte forma:

  Id Name ------------- 1 A 2 B 3 C 

Se eu executar ambas as instruções SQL abaixo mencionadas, ambas as saídas serão as mesmas

 select * from Table1 left join Table2 on Table1.id = Table2.id select * from Table2 right join Table1 on Table1.id = Table2.id 

Por favor, explique a diferença entre as junções esquerda e direita acima das declarações sql.

 Select * from Table1 left join Table2 ... 

e

 Select * from Table2 right join Table1 ... 

são de fato completamente intercambiáveis. No entanto, tente Table2 left join Table1 (ou seu par idêntico, Table1 right join Table2 ) para ver a diferença. Essa consulta deve fornecer mais linhas, pois a Tabela2 contém uma linha com um ID que não está presente na Tabela1.

O Codeproject tem essa imagem que explica os fundamentos simples de junções SQL, extraídos de: http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx SQL joins explained

A tabela da qual você está tirando dados é ‘LEFT’.
A tabela que você está ingressando é ‘DIREITA’.
LEFT JOIN: Pegue todos os itens da tabela da esquerda E (somente) itens correspondentes da tabela da direita.
RIGHT JOIN: Pegue todos os itens da tabela da direita E (apenas) itens correspondentes da tabela da esquerda.
Assim:

 Select * from Table1 left join Table2 on Table1.id = Table2.id 

dá:

 Id Name ------------- 1 A 2 B 

mas:

 Select * from Table1 right join Table2 on Table1.id = Table2.id 

dá:

 Id Name ------------- 1 A 2 B 3 C 

você estava certo juntando-se à mesa com menos linhas na tabela com mais linhas
E
novamente, deixou a mesa de junit com menos linhas na tabela com mais linhas
Experimentar:

  If Table1.Rows.Count > Table2.Rows.Count Then ' Left Join Else ' Right Join End If 
 select fields from tableA --left left join tableB --right on tableA.key = tableB.key 

A tabela no from neste exemplo tableA , está no lado esquerdo da relação.

 tableA <- tableB [left]------[right] 

Portanto, se você deseja obter todas as linhas da tabela à esquerda ( tableA ), mesmo que não haja correspondências na tabela à direita ( tableB ), você usará a "join esquerda".

E se você quiser pegar todas as linhas da tabela da direita (tabela tableB ), mesmo se não houver correspondências na tabela da esquerda (tabela tableA ), você usará a right join .

Assim, a consulta a seguir é equivalente àquela usada acima.

 select fields from tableB right join tableA on tableB.key = tableA.key 

Você parece estar perguntando: “Se eu puder rewrite um RIGHT OUTER JOIN usando a syntax LEFT OUTER JOIN , por que ter uma syntax do RIGHT OUTER JOIN ?” Penso que a resposta a esta questão é, porque os designers da linguagem não quiseram colocar tal restrição aos usuários (e eu acho que eles teriam sido criticados se o fizessem), o que forçaria os usuários a mudar a ordem das tabelas. na cláusula FROM em algumas circunstâncias, quando apenas mudando o tipo de junit.

Suas duas declarações são equivalentes.

A maioria das pessoas usa apenas o LEFT JOIN já que parece mais intuitivo, e é uma syntax universal – não acho que todos os RDBMS suportem o RIGHT JOIN .

(INNER) JOIN: Retorna registros que possuem valores correspondentes nas duas tabelas.

LEFT (OUTER) JOIN: retorna todos os registros da tabela à esquerda e os registros correspondentes da tabela à direita.

DIREITA (EXTERIOR) JOIN: Retorna todos os registros da tabela à direita e os registros correspondentes da tabela à esquerda.

FULL (OUTER) JOIN: Retorna todos os registros quando há uma correspondência na tabela esquerda ou direita

Por exemplo, suponhamos que temos duas tabelas com os seguintes registros:

Tabela A

 id firstname lastname ___________________________ 1 Ram Thapa 2 sam Koirala 3 abc xyz 6 sruthy abc 

Tabela B

 id2 place _____________ 1 Nepal 2 USA 3 Lumbini 5 Kathmandu 

Junção interna

Nota: Isso dá a interseção de duas tabelas.

Junção interna

Sintaxe

 SELECT column_name FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name; 

Aplique-o na sua tabela de amostra:

 SELECT TableA.firstName,TableA.lastName,TableB.Place FROM TableA INNER JOIN TableB ON TableA.id = TableB.id2; 

Resultado será:

 firstName lastName Place _____________________________________ Ram Thapa Nepal sam Koirala USA abc xyz Lumbini 

Associação à esquerda

Nota: fornecerá todas as linhas selecionadas na Tabela A, além de todas as linhas selecionadas comuns na Tabela B.

Associação à esquerda

 SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name; 

Aplique-o na sua tabela de amostra

 SELECT TableA.firstName,TableA.lastName,TableB.Place FROM TableA LEFT JOIN TableB ON TableA.id = TableB.id2; 

Resultado será:

 firstName lastName Place ______________________________ Ram Thapa Nepal sam Koirala USA abc xyz Lumbini sruthy abc Null 

Junte-se direito

Nota: fornecerá todas as linhas selecionadas na Tabela B, além de todas as linhas selecionadas comuns na Tabela A.

Junte-se direito

Sintaxe:

 SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name; 

Aplique-o na sua tabela samole:

 SELECT TableA.firstName,TableA.lastName,TableB.Place FROM TableA RIGHT JOIN TableB ON TableA.id = TableB.id2; 

Resultado será bw:

 firstName lastName Place ______________________________ Ram Thapa Nepal sam Koirala USA abc xyz Lumbini Null Null Kathmandu 

Junção Completa

Nota: É o mesmo que operação de união, ele retornará todos os valores selecionados de ambas as tabelas.

Junção completa

Sintaxe:

 SELECT column_name(s) FROM table1 FULL OUTER JOIN table2 ON table1.column_name = table2.column_name; 

Aplique-o no seu samp [le table:

 SELECT TableA.firstName,TableA.lastName,TableB.Place FROM TableA FULL JOIN TableB ON TableA.id = TableB.id2; 

Resultado será:

 firstName lastName Place ______________________________ Ram Thapa Nepal sam Koirala USA abc xyz Lumbini sruthy abc Null Null Null Kathmandu 

Alguns fatos

Para INNER junta-se a ordem não importa

Para (ESQUERDA, DIREITA ou CHEIA) EXTERIOR se junta, a ordem é importante

Encontre mais em w3schools

Eu sinto que podemos requerer AND condition em where cláusula do último algarismo de Outer Excluding JOIN para que possamos obter o resultado desejado de A Union B Minus A Interaction B Sinto que a consulta precisa ser atualizada para

 SELECT  FROM Table_A A FULL OUTER JOIN Table_B B ON A.Key = B.Key WHERE A.Key IS NULL AND B.Key IS NULL 

Se usarmos OR , obteremos todos os resultados de A Union B

select * from Table1 left join Tabela2 na Tabela1.id = Tabela2.id

Na primeira consulta, Left join compara a tabela table1 do lado esquerdo à tabela table2 do lado direito .

Em que todas as propriedades de table1 serão mostradas, enquanto que em table2 somente essas propriedades serão mostradas em qual condição será true.

select * from Table2 right join Table1 na Tabela1.id = Tabela2.id

Na primeira consulta, Right join compara a table1 da tabela do lado direito à table2 da tabela do lado esquerdo .

Em que todas as propriedades de table1 serão mostradas, enquanto que em table2 somente essas propriedades serão mostradas em qual condição será true.

Ambas as consultas fornecerão o mesmo resultado porque a declaração da tabela na consulta é diferente, como você está declarando table1 e table2 na esquerda e direita, respectivamente na primeira consulta à esquerda , e também declarando table1 e table2 na direita e esquerda, respectivamente na segunda junit direita inquerir.

Esta é a razão pela qual você está obtendo o mesmo resultado em ambas as consultas. Então, se você quer resultado diferente, então execute essas duas consultas respectivamente,

select * from Table1 left join Tabela2 na Tabela1.id = Tabela2.id

select * from Table1 right join Tabela2 na Tabela1.id = Tabela2.id

Select * from Table1 t1 Left Join Table2 t2 on t1.id=t2.id Por definição: Left Join seleciona todas as colunas mencionadas com a palavra-chave “select” da Tabela 1 e as colunas da Tabela 2 que correspondem aos critérios após a “on” palavra chave.

Da mesma forma, por definição: Right Join seleciona todas as colunas mencionadas com a palavra-chave “select” da Tabela 2 e as colunas da Tabela 1 que correspondem aos critérios após a palavra-chave “on”.

Referindo-se à sua pergunta, os id’s em ambas as tabelas são comparados com todas as colunas necessárias para serem lançadas na saída. Portanto, os ids 1 e 2 são comuns nas duas tabelas e, como resultado, você terá quatro colunas com as colunas id e nome da primeira e da segunda tabela, na ordem.

*select * from Table1 left join Table2 on Table1.id = Table2.id

A expressão acima, pega todos os registros (linhas) da tabela 1 e colunas, com id correspondentes da tabela 1 e tabela 2, da tabela 2.

select * from Table2 right join Table1 on Table1.id = Table2.id**

Similarmente da expressão acima, ele pega todos os registros (linhas) da tabela 1 e colunas, com id correspondentes da tabela 1 e tabela 2, da tabela 2. (lembre-se, isso é uma junit direita então todas as colunas da tabela2 e não da tabela 1 será considerado).