Panelen



Forumnavigering
Senast inloggade
RSS
Sponsorer
Artiklar > Databaser & SQL

Användning av Left, Right och Inner Join

I denna artikel kommer jag att gå igenom tre mycket användbara kommandon i SQL, det kallas för Right, Left och Inner Join. Kort och gott, man använder de för att hämta data från flera olika tabeller samtidigt i en och samma SQL-rad.

Exempel på databas

Först och främst ska jag rita upp en databas, detta är bara ett exempel för att få dig att förstå hur dessa kommandon fungerar. Den första databasen kallar vi för tblMembers och den kommer att innehålla information om registrerade användare:

 memID

 memFirstName

memLastName 

 1

 Shadi

Domat 

 2

 Johan

 Levander

 3

 Johanna

 Blomqvist

 4

 Sanna

 Johansson

Och nu ska vi skapa en till databas som vi har sparat meddelande-inlägg i. Vi kallar den databasen för tblPM.

 pmFrom

 pmTo

pmMsg

2

 1

Hej Shadi!

3

 1

 Du är bäst!

1

 3

 Hejdå J!

2

 4

 Vad görs?

Sådär, då har vi två databaser, en som har hand om användarna och en som har hand om meddelandena/PM.

Inner join

Det första vi ska göra är att vi ska koppla dessa två databaserna och hämta meddelandena för användaren med id 3, alltså Johanna. Då kan vi använda Inner join:

SELECT m.memFirstName, p.pmMsg FROM tblPM p INNER JOIN tblMembers m ON p.pmFrom = m.memID WHERE p.pmTo = 3

Vänta lite, vad hände nu? Lugn, jag ska förklara:

Först skrev vi att vi vill hämta memFirstname och pmMsg från de två tabellerna. Men varför står det m. och p.? Jo för att om du fortsätter att läsa på raden så står det "...FROM tblPM p...". Det vi gjorde helt enkelt är att vi gav tabellen ett kortare namn. Det är inte obligatoriskt, du kan ju skriva tblPM.pmMsg, men då blir det ju längre.

Nu kommer det roliga, här säger vi att vi vill "sammanslå" tblPM med tblMembers (som vi också gav ett kortare namn: m). Vi ser till att ID på den som skickade meddelandet stämmer överens med memID. Och själklart ska det bara gälla för medlemmen med id 3.

Vet du vilket meddelande du får fram då? Just det:

 memFirstName

pmMsg

Shadi

Hejdå J!

Left Join

Vad händer om man trots att inget meddelande har hittats, vill hämta resterande meddelandena? Går det trots att Johanna inte har fått några meddelanden? Jadå, det går, men Left Join.

SELECT m.memFirstName, p.pmMsg FROM tblPM p LEFT JOIN tblMembers m ON p.pmFrom = m.userID WHERE p.pmTo = 2

Det som kommer hända nu är att meddelandena som skickats till Johanna kommer att hämtas från den den vänstra tabellen tblPM, som vanligt, men om inga finns så kommer alla poster att hämtas ändå från den tabellen. Samma krav ställs här som på Inner Join. I detta exempel har vi testat att leta efter meddelanden som tillhör Johan (id = 2) istället. Vilka inlägg hämtar den? Alla:

 memFirstName

pmMsg

Johan

Hej Shadi!

Johanna

 Du är bäst!

Shadi

 Hejdå J!

Johan

 Vad görs?

Right Join

Det här är mer eller mindre samma sak som Left Join, den enda skillnaden är...just det, den hämtar alla poster från den högra tabellen som i detta fall är? Just det tblMembers.

SELECT m.memFirstName, p.pmMsg FROM tblPM p RIGHTJOIN tblMembers m ON p.pmFrom = m.userID WHERE p.pmTo = 2

Och resultatet blir

 

 memFirstName

pmMsg

Johan

Hej Shadi!

Johanna

 Du är bäst!

Shadi

 Hejdå J!

Johan

 Vad görs?

Sanna

 

Slutord

Med reservation för stavfel.

Skapades: 2007-08-19 23:57:18
Skribent: Shadi
Lästs 3791 gånger
Betyg: 0 (artikeln har endast 1 röster, det krävs minst 5 för ett betyg)

Kommentarer

pbf sa den 20 augusti 2007 kl 22:07:
Härlig artikel. Till er som inte använt er av detta tidigare: Börja nu!
Dimaspy sa den 20 augusti 2007 kl 23:18:
Riktigt användbart! Detta kunde jag inte innan!

@pbf;
Absolut :D
Pettersoft sa den 16 januari 2008 kl 18:59:
SQL är ett av dem bästa databasprogrammen tycker jag =D
frisko sa den 21 januari 2008 kl 22:45:
Bra artikel!
Johan_P sa den 12 november 2008 kl 19:05:
Försöker lära in detta nu, verkar vara mycket användbart!
© Copyright 2007-2009 Shadi Domat | Version 3.0 | Sidkarta | Policy