Database
 sql >> Database >  >> RDS >> Database

Come unire più (3+) tabelle in un'unica istruzione

Problema:

Vorresti combinare i dati di più di due tabelle utilizzando una sola istruzione SELECT.

Esempio:

Ci sono quattro tabelle nel nostro database:student , teacher , subject e learning .

Lo student la tabella contiene i dati nelle seguenti colonne:id , first_name e last_name .

id nome cognome
1 Tom Mugnaio
2 Giovanni Primavera
3 Lisa Williams
4 Elli Barker
5 Giacomo More

Il teacher la tabella contiene i dati nelle seguenti colonne:id , first_name , last_name e subject .

id nome cognome
1 Milano Fabio
2 Carlo Davis
3 Segna More

Il subject la tabella contiene i dati nelle seguenti colonne:id e first_name .

id
1 Inglese
2 Arte
3 Musica

Infine, il learning la tabella contiene i dati nelle seguenti colonne:id , mark , subject_id , student_id e teacher_id .

id segna subject_id ID_studente ID_insegnante
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

Vogliamo sapere quali studenti stanno studiando inglese, musica e arte, nonché quali insegnanti stanno insegnando a queste classi. Seleziona la materia del corso, il cognome dello studente che segue quel corso e il cognome dell'insegnante che tiene quel corso.

Soluzione:

Usa più JOIN s nella tua richiesta:

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; 

Questa query restituisce record con il nome della materia del corso e i cognomi degli studenti e dei docenti:

nome_oggetto s_last_name t_last_name
Musica More Mugnaio
Arte Davis Mugnaio
Inglese Fabio Primavera
Arte Davis Williams
Musica Davis Barker
Musica More More

Questi dati provengono da tre tabelle, quindi dobbiamo unire tutte quelle tabelle per ottenere le informazioni che cerchiamo.

Discussione:

Se desideri combinare i dati archiviati in più tabelle (più di due), dovresti utilizzare il JOIN operatore più volte. Per prima cosa, unisci due tabelle come faresti normalmente (usando JOIN , LEFT JOIN , RIGHT JOIN o FULL JOIN , a seconda dei casi). Il JOIN l'operazione crea una "tabella virtuale" che memorizza i dati combinati delle due tabelle. Nel nostro esempio, la tabella dei risultati è una combinazione di learning e subject tabelle.

Il passaggio successivo consiste nell'unire questa tabella dei risultati alla terza tabella (nel nostro esempio, student ). È come un normale JOIN :ti unisci al “tavolo virtuale” e al terzo tavolo con una condizione adeguata. Questa condizione dovrebbe generalmente includere una o più colonne della tabella aggiuntiva (student ) e una o più colonne della “tabella virtuale”. Nel nostro esempio, facciamo riferimento allo student tabella nella seconda condizione JOIN.

A questo punto, abbiamo una nuova tabella virtuale con i dati di tre tabelle. L'ultimo passaggio consiste nell'aggiungere i dati dalla quarta tabella (nel nostro esempio, teacher ). e unisciti usando la chiave di queste tabelle (nel nostro esempio, id dal teacher tabella e teacher_id dal learning tabella).

Se devi unirti a un altro tavolo, puoi utilizzare un altro JOIN operatore con una condizione appropriata nella clausola ON. In teoria, puoi unirti a tutti i tavoli che vuoi.