Artiklar » SQL » SQL kommandon fortsättning DEL 2

 
 

SQL kommandon fortsättning DEL 2

Författare: fettecke
Datum: den 13 januari 2004
Antal lästa: 10231
Ej stjärnmärkt

Kursen skall handla om olika Joins och sub-selects.
En Join i SQL är att du länkar samman X antal tabeller i en enda fråga, på så sätt minimerar du antal frågor mot databasen avsevärt, och spar prestanda på servern. Samma sak blir det med en sub-select fast på ett annat sätt.

Det finns flera olika typer av joins, Eque join, Left join, Right join, Inner join, Outer join m.m, för att denna artikel inte skall bli så enormt lång så kommer jag bara att gå igenom enklare grunder inom Eque join och Inner join.

Vad är en sub-select då? Det är en SQL-fråga som ligger innanför en annan SQL-fråga och använder värdet du får från sub-select frågan till ett värde i den riktiga SQL-frågan, det kanske låter lite invecklat, men egentligen inte.

I detta exempel så använder jag mig av två tabeller som heter tbl_Members, och tbl_Mail:

tbl_Members
ID / usrName / From
1 / Anders / Östersund
2 / Johannes / Malmö
3 / Josefin / Stockholm

tbl_gb ID / From / Mess
1 / Anders / Tenare Anders, Hur e det
2 / Johannes / Men vad har du nu ställt till med?
3 / Björn / Men du va ju en riktig krabba såg jag

Vårt första exempel är att vi nu skall skriva ut vår Gästboks information, tillsammans med tbl_Members.from.
I en join så matchar man poster med varandra, skapar relationer dvs. i vårt exempel så matchar vi namnen i båda tabellerna, varje namn måste finnas i båda tabellerna för att vi skall få ut poster på just det namnet:
Kod:


  SELECT tbl_gb.FromUsr, tbl_gb.Mess, tbl_Members.From
  FROM tbl_gb INNER JOIN tbl_Members ON tbl_gb.FromUsr = tbl_Members.usrName

' Notera nu att jag skriver tabellnamnet före kolumn-namnet, det gör jag för att förklara vilken tabell som tillhör vilken kolumn, annars kan det bli lite knepigt, detta exempel kommer ge följande resultat pga att dessa 2 namn finns i båda tabellerna, finns ett namn i ena tabellen bara, då hade det blivit omöjligt att matcha informationen från den andra tabellen:
  tbl_gb.FromUsr  tbl_gb.Mess tbl_Members.From
  Anders Tenare Anders, Hur e det Östersund
  Johannes Men vad har du nu ställt till med? Malmö

' Vi kan utveckla frågan så den är mer specifik, när vi använder en WHERE-sats i vår join, används i tex communitys osv för att visa information från olika tabeller om en användare, vi plockar nu bara ut information om Anders:
  SELECT tbl_gb.FromUsr, tbl_gb.Mess, tbl_Members.From
  FROM tbl_gb INNER JOIN tbl_Members ON tbl_gb.FromUsr = tbl_Members.usrName
  WHERE tbl_Members.usrName = 'Anders'

' Blir då detta resultat:
  tbl_gb.FromUsr  tbl_gb.Mess tbl_Members.From
  Anders Tenare Anders, Hur e det Östersund



Eque join
Ett sådant exempel, dessutom lättare att komma ihåg.
Kod:

SELECT tbl_gb.FromUsr, tbl_gb.Mess, tbl_Members.From
FROM tbl_gb WHERE tbl_gb.FromUsr = tbl_Members.usrName


Och funkar ungefärligt på samma sätt som InnerJoin, fast på ett mycket enklare sätt, jag visar dessa joins pga att jag har aldrig behövt använda någon annan typ av join själv.
Om det är nånting som saknas så är det bara att höra av dig

Vi går in på Subquerys nu istället. en mycket smart sak i SQL, ett första exempel:
SELECT FromUsr FROM tbl_gb WHERE FromUsr = (SELECT UsrName FROM tbl_Members WHERE from = 'Östersund')

Blir ett resultat av: tbl_gb.FromUsr / Anders
Orsaken till detta är vår Subselect där vi ställer en fråga efter ett användarnamn, där personen bor i Östersund, resultatet i den frågan är Anders, vi stoppar då in värdet Anders i vår vanliga SQL-fråga så det blir:
WHERE FromUsr = 'Anders'
kort sagt.

Man kan använda Sub-selects frågor på andra ställen, ungefärligt över hela SQLfrågan kan man använda, och man kan använda en sub-select inom en annan sub-select.
En dum sak är att folk ibland använder 2 olika frågor när man vill visa information från en databas, och räkna poster från en annan, då är det en perfekt lösning med en sub-select, ett exempel:
Kod:

SELECT FromUsr, mess, (SELECT count(usrName) FROM tbl_Members) AS Antal FROM tbl_gb


Resultatet
fromUsr Mess antal
Anders Tenare Anders, Hur e det 3
Johannes Men vad har du nu ställt till med? 3
Björn Men du va ju en riktig krabba såg jag 3

Vi visar nu information från tbl_gb tabellen, samt har räknat antalet poster från tbl_Members, allt i en enda fråga.
Jag döper vårt sub-select värde till antal i SQL-koden, igentligen behöver man inte göra det, utan när man skriver ut kolumnerna i ett recordset så kan man använda siffror istället som symboliserar platsen i sql-satsen... det börjar alltid på 0, i vårt exempel så är FromUsr = 0, mess = 1, sub-select = 2.

I Subselects så är det nästan ett måste att specificera sin fråga med WHERE satser, samt bara hämta En enda kolumn i subqueryn.
Detta var några exempel på snabbare SQL-frågor, och mindre antal frågor mot databasen...

Kontakta mig vid problem eller frågor. Lycka till!

/ Anders Wickman
 
     

  » Logga in  
 
Användarnamn

Lösenord

 
     

  » Bli medlem  
  Bli medlem på ASPsidan!  
     

     
  Microsoft  
     

  » Partners  
  Comsolvia  
     
  » ANNONS  
  ingen annons än  
     

  » Senast online  
  Endast för inloggade  
  Antal inloggade: 1  
     

Copyright © 2007 www.ASPsidan.se
ingen sponsrar längre ASPsidan med Dedikerad Server
ASPsidan RSS
   
 XHTML / CSS
Det tog 0,0469 sekunder att ladda sidan