sql >> Databasteknik >  >> RDS >> Mysql

SQL Inner Join – Hur man sammanfogar 3 tabeller i SQL och MySQL

När du arbetar med din databas kan du behöva sätta ihop data från några olika tabeller. Den här artikeln visar dig hur.

Jag har redan skrivit om SQL-kopplingar här och här, men låt oss ta en stund för att se över hur en koppling fungerar först, och särskilt syntaxen som är specifik för MySQL.

SQL Join Statement

Join är ett uttalande som låter dig sätta ihop två tabeller, matcha rader som är relaterade till varandra och bara behålla de rader som kan matchas, inte att behålla oparade rader.

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

SELECT ... FROM sats anger vilken som är den första tabellen, sedan skrivs det andra tabellnamnet precis efter INNER JOIN nyckelord.

Hur de två tabellerna ska sammanfogas skrivs i ON påstående. I det här fallet sammanfogas de två tabellerna med relationen table1.id = table2.id .

Det är möjligt att använda flera join-satser tillsammans för att sammanfoga mer än en tabell samtidigt.

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

För att göra det lägger du till en andra INNER JOIN och en andra ON uttalande för att indikera den tredje tabellen och den andra relationen.

Låt oss prata ett ögonblick om relationerna du kan ha mellan tabeller och varför du kanske vill slå samman tre tabeller.

Relationer mellan tabeller i SQL

När du har tabeller som är relaterade till varandra kan deras relationer vara en av olika typer.

en-till-många

I en en-till-många-relation kan en rad i den första tabellen relateras till flera rader i den andra tabellen.

I en relationsdatabas kan detta implementeras med den andra tabellen som har ett first_table_id kolumn som säger till vilken rad i den första tabellen den raden är relaterad.

många-till-en

I en sorts många-till-en-relation kan en rad i den första tabellen relateras till en enda rad i den andra tabellen, och en rad i den andra tabellen kan relateras till flera rader i den första tabellen.

I en relationsdatabas kan detta implementeras med den första tabellen som har ett second_table_id kolumn som säger till vilken rad i den andra tabellen den raden är relaterad.

många-till-många

I det här fallet är flera rader relaterade till flera rader.

Den här typen av relation kan inte representeras som den är med SQL-tabeller – du måste lägga till en kopplingstabell mellan de två tabellerna så att endast många-till-en- och en-till-många-relationer finns mellan tabellerna.

Varje rad i tabellen i mitten representerar en relation mellan raderna i den vänstra tabellen och och raderna i den högra tabellen.

I praktiken i MySQL kommer den mellantabellen att ha en kolumn för first_table_id och en kolumn för second_table_id , där varje kombination är unik.

Ansluta SQL-tabeller i praktiken

Låt oss föreställa oss att vi har en organisations databas, där vi har en tabell med team (deras namn och annan identifierande information) och en tabell med projekt (namn, framsteg och så vidare).

id team_name specialitet
1 Banankastare Bananer
2 Trägnagare Gnaga på trä
3 De rosa elefanterna Trampar i marken
4 Fluffig potatis Arbeta och sova
id projektnamn framsteg
1 Dambyggnad Något mer vedgnag och markstamp behövs
2 Banankaka Någon äter alla bananerna
3 Sömnforskning För mycket sömn inte tillräckligt med forskning

Eftersom ett team kan arbeta med flera projekt och ett projekt kan arbetas med av flera team, finns det också en tredje tabell som håller reda på lag-projektmatchningar.

projekt-id grupp-id
1 2
1 3
2 1
3 1
3 2
3 3
3 4

Vi kan använda en JOIN uttalande för att sätta ihop allt när vi behöver se informationen från tabellerna på ett mänskligt läsbart sätt, så här:

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;

Vi väljer vilka kolumner som ska visas från varje tabell med en SELECT uttalande.

Vi anger hur raderna i tabellerna ska kombineras med en ON uttalande.

Och vi ordnar raderna på det sätt vi föredrar med en ORDER BY uttalande.

ON uttalanden teams.id = matches.team_id och matches.projects_id = projects.id innebär att raderna kombineras med raderna i matches tabell. Varje rad i utdatatabellen har projektnamnet och teamnamnet kombinerade med paren av projekt-id och team-id i matches bord.

Utdatatabellen kommer att se ut som nedan.

Team_name Projektnamn
Banankastare Banankaka
Banankastare Sömnforskning
Trägnagare Dam Bulding
Trägnagare Sömnforskning
De rosa elefanterna Dambyggnad
De rosa elefanterna Dambyggnad
Fluffig potatis Sömnforskning

Det finns ingen kolumn direkt från matches tabell. matches Tabellen visas inte i utdata men den används som instruktioner för hur man kombinerar raderna i teams och projects tabeller.

Slutsats

JOIN statement låter dig slå samman en eller flera tabeller. Den måste användas tillsammans med ON uttalande för att bestämma förhållandet mellan raderna i en tabell och raderna i en annan tabell.

I den här artikeln har du lärt dig hur du använder JOIN för att sammanfoga tre olika tabeller.



  1. Hur man aktiverar den långsamma frågeloggen i MySQL

  2. Varför skapar man en vy i en databas?

  3. Den heliga graalen att rengöra input och output i php?

  4. Hur man krypterar en lagrad procedur i SQL Server