SQL JOIN

SQL join används för att fråga data från en eller flera tabeller baserat på relationerna mellan kolumnerna i dessa tabeller.

Join och Nyckel

Ibland behöver vi hämta data från två eller fler tabeller för att få ett fullständigt resultat. Då måste vi utföra en join.

Tabeller i databasen kan relateras till varandra genom nycklar. En huvukolumn (Primary Key) är en kolumn där varje rad har ett unikt värde. I tabellen är varje huvukolumns värde unikt. Syftet med detta är att korsa binda data mellan tabeller utan att upprepa all data i varje tabell.

Se "Persons"-tabellen:

Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

Vänligen notera att "Id_P"-kolumnen är huvukolumnen i Personen-tabellen. Detta innebär att ingen rad kan ha samma Id_P. Även om två personer har samma namn kan Id_P skilja dem från varandra.

Nästa, se "Orders"-tabellen:

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65

Vänligen notera att "Id_O"-kolumnen är huvukolumnen i Orders-tabellen, och "Id_P"-kolumnen i Orders-tabellen används för att hänvisa till Personen-tabellen utan att använda deras exakta namn.

Observera att "Id_P"-kolumnen länkar de två ovanstående tabellerna samman.

Hänvisa till två tabeller

Vi kan hämta data från två tabeller genom att hänvisa till båda tabellerna:

Vem har beställt produkter och vad har de beställt?

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P 

Resultatset:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678

SQL JOIN - Använda Join

Förutom ovanstående metod kan vi också använda nyckelordet JOIN för att hämta data från två tabeller.

Om vi vill lista alla människors beställningar kan vi använda följande SELECT-sats:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName

Resultatset:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678

Olika SQL JOIN

Förutom INNER JOIN (inre anslutning) som vi använde i föregående exempel kan vi också använda flera andra typer av anslutningar.

Nedan listas de JOIN-typer du kan använda, samt skillnaderna mellan dem.

  • JOIN: Returnerar rader om det finns minst en match i tabellen
  • LEFT JOIN: Returnerar alla rader från vänster tabell även om det inte finns matchning i höger tabell
  • RIGHT JOIN: Returnerar alla rader från höger tabell även om det inte finns matchning i vänster tabell
  • FULL JOIN: Returnerar rader om det finns matchning i någon av tabellerna