Juntar várias tabelas em SQL

Alguém pode explicar-me sobre as juntas?

a junção interna selecciona dados comuns com base na condição onde.

a junção exterior esquerda selecciona todos os dados da esquerda, independentemente do comum, mas retira dados comuns da tabela direita e vice-versa para o exterior direito.

Eu sei o básico, mas a pergunta fica quando se trata de juntar por mais de 5, 8, 10 mesas.

Acho que tenho 10 mesas para juntar. Se eu tenho interior juntar-se com as primeiras 5 mesas e agora tentar aplicar uma junção à esquerda com o 6ª tabela, agora como a consulta vai funcionar?

Quero dizer agora que o conjunto de resultados das primeiras 5 tabelas será tomado como a mesa esquerda e a sexta será considerada como a mesa direita? Ou só a Quinta mesa será considerada esquerda e a sexta como direita? Por favor, ajude-me com isto.

Author: Martin Smith, 2013-04-13

4 answers

Ao juntar várias tabelas, a saída de cada junção forma logicamente uma tabela virtual que vai para a próxima junção.

Assim, no exemplo na sua pergunta, o resultado compósito da junção das primeiras 5 tabelas seria tratado como a tabela da mão esquerda.

Veja O Poster de processamento lógico da Consulta de Itzik Ben-Gan para mais informações sobre isto.

As tabelas virtuais envolvidas nas juntas podem ser controladas posicionando a cláusula ON. Por exemplo

SELECT *
FROM   T1
       INNER JOIN T2
         ON T2.C = T1.C
       INNER JOIN T3
                  LEFT JOIN T4
                    ON T4.C = T3.C
         ON T3.C = T2.C 

É equivalente a (T1 Inner Join T2) Inner Join (T3 Left Join T4)

 17
Author: Martin Smith, 2013-04-13 13:18:18
É útil pensar na sequência de JOIN, por isso a primeira está correcta.
SELECT *
  FROM a
  INNER JOIN b ON b.a = a.id
  INNER JOIN c ON c.b = b.id
  LEFT JOIN d ON d.c = c.id
  LEFT JOIN e ON e.d = d.id

Seria todos os campos da a e b e c onde todos os ON critérios de correspondência, além de os valores de d, onde os seus critérios de correspondência de além de todo o conteúdo de e, onde todos os seus critérios de correspondência.

Eu sei que é perfeitamente aceitável, mas descobri pela minha experiência que é desnecessário - quase sempre me associo às coisas da esquerda para a direita.
 6
Author: Colselaw, 2013-04-13 13:35:36

> código de visão de junção interior simples...

CREATE VIEW room_view
AS SELECT a.*,b.*
FROM j4_booking a INNER JOIN j4_scheduling b
on a.room_id = b.room_id;
 1
Author: Manu R S, 2013-11-04 11:41:52

Você pode aplicar join assim..

select a.*,b.*,c.*,d.*,e.*  
from [DatabaseName].[Table_a] a 
INNER JOIN [DatabaseName].[Table_b] b ON a.id = b.id 
INNER JOIN [DatabaseName].[Table_c] c ON b.id=c.id 
INNER JOIN [DatabaseName].[Table_d] d on c.id=d.id 
INNER JOIN [DatabaseName].[Table_e] e on d.id=e.id where a.con=5  and 
b.con=6

Aqui, no lugar de A.* e em que condição, você pode mostrar coluna (arquivado) que você gosta e de acordo com a condição em que condição. Você pode inserir Mais tabela e banco de dados de acordo com sua escolha. Mas lembre-se que você precisa mencionar o nome da base de dados e alias se você trabalha em uma base de dados diferente.

 0
Author: Bha15, 2017-07-11 10:27:50