I många fall behöver man hämta ut data från fler än en tabell vid hämtning av data. Hur gör man då?
Om man har fält i vardera tabell som står reffererar till varandra som tex i ett community där du har en gästbok eller liknande.
Users:
userName - userID Björn -1 Mikael - 2 Niklas - 3
guestbook:
ref_ToID - ref_FromID - gbMsg 1 - 2 - Tjenare, kungen här 2 - 1 - Lorem ipsum! 2 - 1 - Ipsum vadå? 2 - 1 - Ipsum ASP 1 - 2 - Tove är kär i dig 1 - 5 - Jag finns inte
I detta fallet är jag inloggad som mig själv (Björn) och vet att jag har id 1 så vill jag hämta ut all data där det har skickats till mig. Märkt även att jag använder alias på mina tabeller för att förenkla min SQLquery.
Inner Join
SELECT u.userName, g.gbMsg FROM guestbook g INNER JOIN users u ON g.ref_FromID = u.userID WHERE g.ref_ToID = 1
Resultat
u.UserName - g.gbMsg Mikael - Tjenare, kungen här Mikael - Tove är kär i dig
Det som hände var att den kopplade ihop tabellen guestbook med users där userID stämde överrens med ID't på den som skickade inlägget.
Left Join: Left join fungerar på samma sätt som inner join strukturmässigt i queryn men resultatet blir annorlunda. Den returnerar nämligen alla poster från första valda tabellen (guestbook i exemplet ovanför) dvs den hämtar alla gästboksinlägg även om där inte finns någon avsändare som stämmer överens.
SELECT u.userName, g.gbMsg FROM guestbook g LFET JOIN users u ON g.ref_FromID = u.userID WHERE g.ref_ToID = 1
Resultat:
u.UserName - g.gbMsg Mikael - Tjenare, kungen här Mikael - Tove är kär i dig - Jag finns inte
Right Join Right join returnerar alla poster från andra tabellen (users i exemplet ovan) även om det inte finns motsvarande post i första tabellen (guestbook)
SELECT u.userName, g.gbMsg FROM guestbook g RIGHT JOIN users u ON g.ref_FromID = u.userID WHERE g.ref_ToID = 1
Resultat:
u.UserName - g.gbMsg Björn - Tjenare, kungen här Mikael - Lorem ipsum! Mikael - 1 - Ipsum vadå? Mikael - Ipsum ASP Björn - Tove är kär i dig Niklas -
Fler artiklar om SQL kommer vid senare skede. PM:a gärna om ni hittar något slarvfel |