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

SQL Inner Join – Come unire 3 tabelle in SQL e MySQL

Quando si lavora con il database, potrebbe essere necessario mettere insieme i dati di alcune tabelle diverse. Questo articolo ti mostrerà come fare.

Ho già scritto sui join SQL qui e qui, ma prendiamoci un momento per esaminare prima come funziona un join, e in particolare la sintassi specifica per MySQL.

Istruzione SQL Join

Join è un'istruzione che ti consente di mettere insieme due tabelle, facendo corrispondere le righe correlate tra loro e mantenendo solo le righe che possono essere abbinate, non mantenendo le righe non accoppiate.

SELECT * FROM table1 
  INNER JOIN table2
  ON table1.id = table2.id;

Il SELECT ... FROM indica qual è la prima tabella, quindi il nome della seconda tabella viene scritto subito dopo il INNER JOIN parole chiave.

Il modo in cui le due tabelle devono essere unite è scritto in ON dichiarazione. In questo caso le due tabelle vengono unite usando la relazione table1.id = table2.id .

È possibile utilizzare più istruzioni join insieme per unire più tabelle contemporaneamente.

SELECT *
  FROM table1
  INNER JOIN table2
  ON table1.id = table2.id
  INNER JOIN table3
  ON table2.id = table3.id;

Per farlo aggiungi un secondo INNER JOIN istruzione e un secondo ON istruzione per indicare la terza tabella e la seconda relazione.

Parliamo un momento delle relazioni che puoi avere tra i tavoli e del motivo per cui potresti voler unire tre tavoli insieme.

Relazioni tra tabelle in SQL

Quando hai tabelle correlate tra loro, le loro relazioni potrebbero essere di vari tipi.

uno-a-molti

In un tipo di relazione uno-a-molti, una riga della prima tabella può essere correlata a più righe della seconda tabella.

In un database relazionale questo può essere implementato con la seconda tabella che ha un first_table_id colonna che dice a quale riga della prima tabella è correlata quella riga.

molti-a-uno

In un tipo di relazione molti-a-uno, una riga della prima tabella può essere correlata a una singola riga della seconda tabella e una riga della seconda tabella può essere correlata a più righe della prima tabella.

In un database relazionale questo può essere implementato con la prima tabella che ha un second_table_id colonna che dice a quale riga della seconda tabella è correlata quella riga.

molti-a-molti

In questo caso più righe sono correlate a più righe.

Questo tipo di relazione non può essere rappresentato come con le tabelle SQL:è necessario aggiungere una tabella di accoppiamento tra le due tabelle in modo che tra le tabelle siano presenti solo relazioni molti-a-uno e uno-a-molti.

Ogni riga della tabella al centro rappresenta una relazione tra le righe della tabella di sinistra e le righe della tabella di destra.

In pratica in MySQL, quella tabella centrale avrà una colonna per first_table_id e una colonna per second_table_id , con ogni combinazione unica.

Unire tabelle SQL in pratica

Immaginiamo di avere il database di un'organizzazione, dove abbiamo una tabella con i team (il loro nome e altre informazioni identificative) e una tabella con i progetti (nome, stato di avanzamento e così via).

id nome_squadra specialità
1 Lanciabanane Banane
2 Rosa legno Rosicchiare il legno
3 Gli elefanti rosa Calpestare il terreno
4 Patate soffici Lavorare e dormire
id nome_progetto progressi
1 Costruzione della diga Sono necessari altri lavori per rosicchiare il legno e pestare il terreno
2 Torta alla banana Qualcuno sta mangiando tutte le banane
3 Ricerca sul sonno Troppo dormire non abbastanza ricerche

Poiché una squadra può lavorare su più progetti e un progetto può essere lavorato da più squadre, c'è anche una terza tabella che tiene traccia delle partite squadra-progetto.

id_progetto ID_gruppo
1 2
1 3
2 1
3 1
3 2
3 3
3 4

Possiamo usare un JOIN dichiarazione per mettere insieme tutto quando abbiamo bisogno di visualizzare le informazioni dalle tabelle in un modo leggibile dall'uomo, in questo modo:

SELECT
  teams.team_name AS team_name,
  projects.project_name AS project_name
FROM TABLE teams
INNER JOIN matches
  ON teams.id = matches.team_id
INNER JOIN matches
  ON matches.project_id = projects.id
ORDER BY teams.id;

Scegliamo quali colonne mostrare da ogni tabella con un SELECT dichiarazione.

Specifichiamo come le righe delle tabelle devono essere combinate con un ON dichiarazione.

E ordiniamo le righe nel modo che preferiamo con un ORDER BY dichiarazione.

Il ON dichiarazioni teams.id = matches.team_id e matches.projects_id = projects.id significa che le righe vengono combinate utilizzando le righe dei matches tavolo. Ogni riga della tabella di output ha il nome del progetto e il nome del team combinati utilizzando le coppie di ID progetto e ID squadra nelle matches tabella.

La tabella di output apparirà come di seguito.

Nome_squadra Nome_progetto
Lanciabanane Torta alla banana
Lanciabanane Ricerca sul sonno
Rosa legno Costruzione della diga
Rosa legno Ricerca sul sonno
Gli elefanti rosa Costruzione della diga
Gli elefanti rosa Costruzione della diga
Patate morbide Ricerca sul sonno

Non ci sono colonne direttamente dalle matches tavolo. Il matches la tabella non viene mostrata nell'output ma viene utilizzata come istruzioni su come combinare le righe dei teams e projects tabelle.

Conclusione

Il JOIN istruzione ti consente di unire insieme una o più tabelle. Deve essere utilizzato insieme a ON istruzione per determinare la relazione tra le righe di una tabella e le righe di una tabella diversa.

In questo articolo hai imparato come usare il JOIN dichiarazione per unire tre diverse tabelle.