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

SQL Inner Join – Sådan forbinder du 3 tabeller i SQL og MySQL

Når du arbejder med din database, skal du muligvis sammensætte data fra et par forskellige tabeller. Denne artikel viser dig hvordan.

Jeg har allerede skrevet om SQL joins her og her, men lad os tage et øjeblik på at gennemgå, hvordan en join fungerer først, og især syntaksen, der er specifik for MySQL.

SQL Join Statement

Join er en erklæring, der lader dig sammensætte to tabeller, der matcher rækker, der er relateret til hinanden, og kun beholder de rækker, der kan matches, ikke at beholde uparrede rækker.

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

SELECT ... FROM sætning angiver, hvilken der er den første tabel, så skrives det andet tabelnavn lige efter INNER JOIN søgeord.

Hvordan de to tabeller skal forbindes er skrevet i ON udmelding. I dette tilfælde er de to tabeller forbundet ved hjælp af forholdet table1.id = table2.id .

Det er muligt at bruge flere join-sætninger sammen for at forbinde mere end én tabel på samme tid.

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

For at gøre det tilføjer du endnu en INNER JOIN sætning og en anden ON sætning for at angive den tredje tabel og den anden relation.

Lad os tale et øjeblik om de relationer, du kan have mellem tabeller, og hvorfor du måske ønsker at slå tre tabeller sammen.

Relationer mellem tabeller i SQL

Når du har tabeller, der er relateret til hinanden, kan deres relationer være en af ​​forskellige typer.

en-til-mange

I en en-til-mange-relation kan én række i den første tabel relateres til flere rækker i den anden tabel.

I en relationsdatabase kan dette implementeres med den anden tabel med et first_table_id kolonne, der siger, hvilken række i den første tabel den række er relateret til.

mange-til-en

I et mange-til-en-forhold kan en række i den første tabel være relateret til en enkelt række i den anden tabel, og en række i den anden tabel kan relateres til flere rækker i den første tabel.

I en relationsdatabase kan dette implementeres med den første tabel med et second_table_id kolonne, der siger, hvilken række i den anden tabel den række er relateret til.

mange-til-mange

I dette tilfælde er flere rækker relateret til flere rækker.

Denne form for relation kan ikke repræsenteres, som den er med SQL-tabeller – du skal tilføje en koblingstabel mellem de to tabeller, så kun mange-til-en og en-til-mange relationer er til stede mellem tabeller.

Hver række i tabellen i midten repræsenterer ét forhold mellem rækkerne i den venstre tabel og og rækkerne i den højre tabel.

I praksis i MySQL vil den midterste tabel have en kolonne for first_table_id og en kolonne for second_table_id , hvor hver kombination er unik.

Sammenslutning af SQL-tabeller i praksis

Lad os forestille os, at vi har en organisations database, hvor vi har en tabel med teams (deres navn og andre identificerende oplysninger) og en tabel med projekter (navn, fremskridt og så videre).

id team_name speciale
1 Banankastere Bananer
2 Trægnavere Gnave på træ
3 De lyserøde elefanter Tramper i jorden
4 Fluffy kartofler Arbejde og sove
id projektnavn fremskridt
1 Dæmningsbygning Noget mere trægnav og jordtrampning påkrævet
2 Banankage Nogen spiser alle bananerne
3 Søvnundersøgelse For meget søvn ikke nok research

Da et team kan arbejde på flere projekter, og et projekt kan arbejdes på af flere teams, er der også en tredje tabel, der holder styr på team-projektkampe.

projekt-id gruppe_id
1 2
1 3
2 1
3 1
3 2
3 3
3 4

Vi kan bruge en JOIN erklæring for at sætte alt sammen, når vi skal se informationen fra tabellerne på en menneskelig læsbar måde, som denne:

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ælger, hvilke kolonner der skal vises fra hver tabel med en SELECT erklæring.

Vi specificerer, hvordan rækkerne i tabellerne skal kombineres med en ON erklæring.

Og vi bestiller rækkerne på den måde, vi foretrækker med en ORDER BY erklæring.

ON udsagn teams.id = matches.team_id og matches.projects_id = projects.id betyder, at rækkerne kombineres ved hjælp af rækkerne i matches bord. Hver række i outputtabellen har projektnavnet og teamnavnet kombineret ved hjælp af parrene af projekt-id og team-id i matches tabel.

Outputtabellen vil se ud som nedenfor.

Team_name Projektnavn
Banankastere Banankage
Banankastere Søvnforskning
Trægnavere Dam Bulding
Trægnavere Søvnforskning
De lyserøde elefanter Dæmningsbygning
De lyserøde elefanter Dæmningsbygning
Fluffy kartofler Søvnforskning

Der er ingen kolonne direkte fra matches bord. matches tabellen vises ikke i outputtet, men den bruges som instruktioner til, hvordan man kombinerer rækkerne i teams og projects tabeller.

Konklusion

JOIN sætning lader dig samle en eller flere tabeller. Den skal bruges sammen med ON sætning for at bestemme forholdet mellem rækkerne i en tabel og rækkerne i en anden tabel.

I denne artikel har du lært, hvordan du bruger JOIN sætning for at samle tre forskellige tabeller.



  1. NUMTODSINTERVAL() Funktion i Oracle

  2. 4 måder at liste alle tabeller i en MySQL-database

  3. 5 måder at kontrollere, om der findes en tabel i MySQL

  4. Gruppér mysql-forespørgsel med 15 minutters intervaller