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.