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.
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.
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! |
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? |
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 |
|
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)