Juntar várias tabelas em SQL
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.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)
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.
> 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;
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.