Tag inte dessa sidor allt för allvarligt för tillfället. Det kommer
mer och bättre snart. För tillfället vill jag bara testa
några koncept.
Structured Query Language (SQL) är ett "språk" som
används för att hantera databaser. Nedan kommer en snabb
genomgång av de vanligaste lösningarna i SQL med betoning på
förfrågningar (SELECT)
1. SELECT
SELECT används för att få en del av en datatabell. Delen kan
vara vissa kolumner eller vissa rader eller en kombination av dessa.
För exemplen antas det finnas två tabeller i en databas, bägge
rätt enkla.
Tabellen Arbete:
|
ID
|
Namn
|
Avdelning
|
Timmar
|
Datum
|
|
1
|
Anders
|
1
|
12
|
12.2.2001
|
|
2
|
Pelle
|
1
|
7
|
12.2.2001
|
|
3
|
Eva
|
2
|
3
|
12.2.2001
|
|
4
|
Anders
|
1
|
6
|
13.2.2001
|
|
5
|
Pelle
|
1
|
6
|
14.2.2001
|
|
6
|
Eva
|
2
|
7
|
14.2.2001
|
|
7
|
Eva
|
2
|
4
|
14.2.2001
|
|
8
|
Anders
|
1
|
4
|
16.2.2001
|
|
9
|
Pelle
|
1
|
6
|
1.3.2001
|
|
10
|
Eva
|
2
|
9
|
2.3.2001
|
|
|
|
Tabellen Avdelningar:
|
Avdelning
|
Namn
|
|
0
|
Ingen
|
|
1
|
IT
|
|
2
|
Ekonomi
|
|
3
|
Rock'n'roll
|
|
|
Enklaste formen av SELECT:
SELECT fältnamn FROM tabellnamn
blir för tabellen Arbete (genom att klicka på SQL satsen så
får du se resultatet):
* betyder alltså att raden kan läsas (på svenska) som:
VÄLJ allt FRÅN tabellen Arbete
Vill vi inte ha alla kolumner (fält) med kan man sätta dit
fältnamnen, med komma mellan, enligt nedanstående exempel:
Prova på att översätta SELECT satsen till svenska.
Observera att fälten inte behöver sättas i "rätt" ordning, utan
vi kan räkna upp dem vilken ordningsföljd som helst
Det kan även gå att sätta samma fält fler gånger,
men resultatet blir kanske inte det du väntat dig... Mer om detta lite
senare i texten
2. Sortering av datat
För sortering används ORDER BY villkor. Se nedanstående exempel
som sortera enligt namn:
Ingenting hindrar att vi kombinerar sorteringar. Om vi gör detta kommer
den att utföra sorteringen i den ordnings vi satt dit fältnamnen. I
nedanstående exempel sorteras datat efter namn i första hand och om
det finns flera likadana namn sordteras dessa efter datum
Sortering kan ske i antingen stigande ordning (a till ö -
standardinställningen) eller fallande (ö till a). Vill vi få
sorteringen fallande används ordet DESC. För stigande kan man
använda ordet ASC, men det är onödigt. I nedanstående
exempel sorteras namnet i stigande ordning men datumen i fallande.
Och nästa sorteras namnen omvänt men datum stigande
Det går även att sortera efter ett fält som inte visas. I
nedanstående visas ID och namn, men datat sorteras efter datum
3. Val av poster
3.1. Numeriska fält
Vi är oftast inte intresserade av allt data som finns i en tabell, utan
vill bara få vissa rader (poster). För detta används ordet
WHERE. Se nedanstående exempel som bara visar personser från
avdelning 1:
Vi kan här använda de vanliga operanderna:
|
=
|
lika med
|
|
<
|
mindre än
|
|
<=
|
mindre än eller lika med
|
|
>
|
större än
|
|
>=
|
större än eller lika med
|
|
<>
|
olika
|
3.2. Textfält
Ovanstående exempel fungerar bra för nummeriska fält men om
fältet innehållet text måste man skriva lite annorlunda. Text
måste alltid omslutas med ' tecken. Se nedanstående exempel som
väljer ut bara de poster där namn är Eva.
Samma operander som för numeriska fält fungerar även här,
bara man kommer ihåg att omsluta texten med ' tecken. Se
nedanstående exempel:
Eftersom ' tecknet anväds för att omsluta texter kan följande
SELECT sats ge oss problem:
Däremot fungerar följande:
Observera att det inte är dubbelt citationstecken " i raden utan två
' tecken efter varandra!
Tips: I VB kan man använda Replace funktionen. Då kan man
skriva följande:
Dim villkor As String
Dim SQL As String
villkor = "rock'n'roll"
SQL = "SELECT * FROM Avdelningar WHERE Namn = '"
& Replace(villkor, "'", "''")
& "'"
...
Observera användningen av & och
' ovan.
3.3. Datum
Datum är ett mycket sorgligt kapitel. Det finns ett stort antal sätt
att kombinera datum, och alla länder har sitt system. I Finland brukar vi
skriva 12.2.2001 när vi avser 12:e februari år 2001. I andra
länder kan detta skrivas på annat sätt. I vissa länder
använder man "."i andra länder "-" eller
"/". För att säkersälla att datum fungerar - oavsett
landsinställningar - kan man använde s.k. "date literals".
Dessa skall alltid omslutas med # tecken samt vara i formen mm/dd/yy eller
mm/dd/yyyy - d.vs. månad med två siffror, ett /-tecken, dag med
två siffror, ett /-tecken samt år med två eller fyra siffror.
Lite beroende på landsintällningarna kan man få andra
versioner att fungera, men kan aldrig vare helt säker...
Nedan är ett exempel på en SQL sats som plockar ut de poster vars
Timmar fält är 12:e dagen i 2:a månaden år 2001 samt en
som plockar ut de som är senare än detta datum.
Man kan aldrig vara helt säker på vad som sker med datum. Se
på nedanstående exempel. Vad är det egentligen vi väljer?
(Testdatabasen är gjord i Access 2000. Andra system uppför sig lite
annorlunda)
Jag brukar ibland "förfalla i synd" och sätta in datum i
textfält. Om man sätter dem i formen YYYYMMDD, t.ex. 20010923,
så går de dessutom att sortera med vanlig textsortering. Hur vi
gör beror lite på vad vi tänker göra med datumen. Om det
är ett textfält så kan vi inte utföra matematiska
beräkningar, t.ex. datum +30, men det är inte alltid detta
behövs...
3.4. Kombinationer av flera villkor
Villkoren som sätts i WHERE delen av SQL satsen går även att
kombinera med hjälp av de logiska operanderna AND, OR och NOT. Nedan
kommer några exempel på detta:
AND och OR behöver man ofta, NOT kan man ofta arbeta sig förbi om det
gäller de enklare jämförelserna. Nedanstående exempel
gör samma sak, men är uttryckta på olika sätt. Avgör
själv vilken du tycker är lättare.
Följande gör även den samma sak med det data vi nu har, men du
måste fråga dig själv om det alltid är så, eller om
det bara råkar vara en slump på grund av datats innehåll. Vad
tror du?
3.5. Parenteser
Gör följande SELECT satser samma sak?
Slutsats: Om man inte använder parenteser så utförs
kombinationerna från vänster till höger. De två
första gjorde samma sak, den tredje avvek från de två
tidigare.