sql >> Database >  >> RDS >> Mysql

SQL Inner Join - Hoe u 3 tabellen samenvoegt in SQL en MySQL

Wanneer u met uw database werkt, moet u mogelijk gegevens uit een paar verschillende tabellen samenstellen. Dit artikel laat je zien hoe.

Ik heb hier en hier al over SQL-joins geschreven, maar laten we eerst even de tijd nemen om te bekijken hoe een join werkt, en met name de syntaxis die specifiek is voor MySQL.

SQL Join-verklaring

Join is een statement waarmee je twee tabellen kunt samenstellen, rijen kunt matchen die aan elkaar gerelateerd zijn, en alleen de rijen kunt behouden die kunnen worden gekoppeld, geen ongepaarde rijen.

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

De SELECT ... FROM statement geeft aan wat de eerste tabel is, waarna de tweede tabelnaam wordt geschreven net na de INNER JOIN trefwoorden.

Hoe de twee tabellen moeten worden samengevoegd, staat in de ON uitspraak. In dit geval worden de twee tabellen samengevoegd met behulp van de relatie table1.id = table2.id .

Het is mogelijk om meerdere join-statements samen te gebruiken om meer dan één tabel tegelijk te joinen.

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

Om dat te doen voeg je een tweede INNER JOIN . toe statement en een tweede ON statement om de derde tabel en de tweede relatie aan te geven.

Laten we het even hebben over de relaties die u tussen tabellen kunt hebben en waarom u misschien drie tabellen wilt samenvoegen.

Relaties tussen tabellen in SQL

Als je tabellen hebt die aan elkaar gerelateerd zijn, kunnen hun relaties van verschillende typen zijn.

een-op-veel

In een een-op-veel-relatie kan een rij van de eerste tabel worden gerelateerd aan meerdere rijen van de tweede tabel.

In een relationele database kan dit worden geïmplementeerd met de tweede tabel met een first_table_id kolom die zegt aan welke rij van de eerste tabel die rij gerelateerd is.

veel-op-een

In een veel-op-een-relatie kan één rij van de eerste tabel worden gerelateerd aan één enkele rij van de tweede tabel en kan één rij van de tweede tabel worden gerelateerd aan meerdere rijen van de eerste tabel.

In een relationele database kan dit worden geïmplementeerd met de eerste tabel met een second_table_id kolom die zegt aan welke rij van de tweede tabel die rij gerelateerd is.

veel-op-veel

In dit geval zijn meerdere rijen gerelateerd aan meerdere rijen.

Dit soort relatie kan niet worden weergegeven zoals bij SQL-tabellen - u moet een koppelingstabel tussen de twee tabellen toevoegen, zodat alleen veel-op-een- en een-op-veel-relaties tussen tabellen aanwezig zijn.

Elke rij van de tabel in het midden vertegenwoordigt één relatie tussen de rijen van de linkertabel en de rijen van de rechtertabel.

In de praktijk zal die middelste tabel in MySQL een kolom hebben voor first_table_id en een kolom voor second_table_id , waarbij elke combinatie uniek is.

SQL-tabellen in de praktijk samenvoegen

Laten we ons voorstellen dat we de database van een organisatie hebben, waar we een tabel hebben met teams (hun naam en andere identificatiegegevens), en een tabel met projecten (naam, voortgang, enzovoort).

id team_name specialiteit
1 Banaanwerpers Bananen
2 Houtknaagdieren Knagen op hout
3 De roze olifanten Op de grond stampen
4 Pluizige aardappelen Werken en slapen
id projectnaam vooruitgang
1 Dam bouwen Nog wat hout knagen en grond stampen nodig
2 Bananentaart Iemand eet alle bananen op
3 Slaaponderzoek Te veel slapen, niet genoeg onderzoek

Omdat een team aan meerdere projecten kan werken en aan een project door meerdere teams kan worden gewerkt, is er ook een derde tabel die team-projectwedstrijden bijhoudt.

project_id group_id
1 2
1 3
2 1
3 1
3 2
3 3
3 4

We kunnen een JOIN . gebruiken verklaring om alles samen te voegen wanneer we de informatie uit de tabellen op een voor mensen leesbare manier moeten bekijken, zoals deze:

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;

We kiezen welke kolommen uit elke tabel worden weergegeven met een SELECT verklaring.

We specificeren hoe de rijen van de tabellen gecombineerd moeten worden met een ON verklaring.

En we ordenen de rijen op de manier die we willen met een ORDER BY verklaring.

De ON statements teams.id = matches.team_id en matches.projects_id = projects.id betekent dat de rijen worden gecombineerd met behulp van de rijen van de matches tafel. Elke rij van de uitvoertabel heeft de projectnaam en de teamnaam gecombineerd met behulp van de paren project-ID en team-ID in de matches tafel.

De uitvoertabel ziet er als volgt uit.

Teamnaam Projectnaam
Banaanwerpers Bananentaart
Banaanwerpers Slaaponderzoek
Houtknaagdieren Dambulding
Houtknaagdieren Slaaponderzoek
De roze olifanten Damgebouw
De roze olifanten Damgebouw
Pluizige aardappelen Slaaponderzoek

Er is geen kolom rechtstreeks uit de matches tafel. De matches tabel wordt niet weergegeven in de uitvoer, maar wordt gebruikt als instructies voor het combineren van de rijen van de teams en projects tabellen.

Conclusie

De JOIN statement kunt u een of meer tabellen samenvoegen. Het moet worden gebruikt in combinatie met de ON statement om de relatie tussen de rijen van een tabel en de rijen van een andere tabel te bepalen.

In dit artikel heb je geleerd hoe je de JOIN . gebruikt statement om drie verschillende tabellen samen te voegen.



  1. Hoe gebruik je COUNT in SQL?

  2. Roep een set-retourfunctie met een array-argument meerdere keren aan

  3. Normaliseer transactiegegevens van tijd- en statuskolommen naar minuten per statuswaarde

  4. java.sql.SQLException:Onjuiste tekenreekswaarde:'\xF0\x9F\x91\xBD\xF0\x9F...'