Database
 sql >> Base de Dados >  >> RDS >> Database

Como juntar várias (3+) tabelas em uma instrução

Problema:


Você gostaria de combinar dados de mais de duas tabelas usando apenas uma instrução SELECT.

Exemplo:


Existem quatro tabelas em nosso banco de dados:student , teacher , subject e learning .

O student tabela contém dados nas seguintes colunas:id , first_name e last_name .
id first_name last_name
1 Tom Moleiro
2 João Primavera
3 Lisa Williams
4 Ellie Barker
5 James Mouro

O teacher tabela contém dados nas seguintes colunas:id , first_name , last_name e subject .
id first_name last_name
1 Milão Smith
2 Carlos Davis
3 Marcar Mouro

O subject tabela contém dados nas seguintes colunas:id e name .
id nome
1 Inglês
2 Arte
3 Música

Por fim, o learning tabela contém dados nas seguintes colunas:id , mark , subject_id , student_id e teacher_id .
id marcar subject_id id_aluno id_do_professor
1 4 1 2 1
2 5 2 3 2
3 4 3 1 3
4 3 2 1 2
5 2 3 5 3
6 3 3 4 2

Queremos saber quais alunos estão estudando inglês, música e arte, bem como quais professores estão ministrando essas aulas. Selecione o assunto do curso, o sobrenome do aluno que está fazendo esse curso e o sobrenome do professor que ministra esse curso.

Solução:


Use vários JOIN s em sua consulta:
SELECT l.name AS subject_name,   
  t.last_name AS student_last_name, 
  st.last_name AS teacher_last_name 
FROM learning AS l  
JOIN subject s ON l.subject_id=s.id
JOIN student st ON l.student_id=st.id
JOIN teacher t ON l.teacher_id=t.id; 

Esta consulta retorna registros com o nome da disciplina do curso e os sobrenomes dos alunos e professores:
subject_name s_last_name t_last_name
Música Mouro Moleiro
Arte Davis Moleiro
Inglês Smith Primavera
Arte Davis Williams
Música Davis Barker
Música Mouro Mouro

Esses dados vêm de três tabelas, então temos que juntar todas essas tabelas para obter as informações que buscamos.

Discussão:


Se você quiser combinar dados armazenados em várias (mais de duas) tabelas, você deve usar o JOIN operador várias vezes. Primeiro, você junta duas tabelas como faria normalmente (usando JOIN , LEFT JOIN , RIGHT JOIN , ou FULL JOIN , como apropriado). O JOIN A operação cria uma “tabela virtual” que armazena dados combinados das duas tabelas. Em nosso exemplo, a tabela de resultados é uma combinação de learning e subject mesas.

O próximo passo é juntar esta tabela de resultados à terceira tabela (no nosso exemplo, student ). Isso é como um JOIN normal :você junta a “mesa virtual” e a terceira mesa com uma condição apropriada. Essa condição geralmente deve incluir uma ou mais colunas da tabela adicional (student ) e uma ou mais colunas da “tabela virtual”. Em nosso exemplo, fazemos referência ao student tabela na segunda condição JOIN.

Neste ponto, temos uma nova tabela virtual com dados de três tabelas. A última etapa é adicionar dados da quarta tabela (no nosso exemplo, teacher ). e junte-se usando a chave dessas tabelas (no nosso exemplo, id do teacher tabela e teacher_id do learning tabela).

Se você tiver que ingressar em outra tabela, poderá usar outro JOIN operador com uma condição apropriada na cláusula ON. Em teoria, você pode juntar quantas tabelas quiser.