SQL
[ Hem ] Allmänt ASP XML SQL ADO HTML CSS VB Java Design Karta

SQL

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.

  Din uppgiftADO


Lindrig sömnlöshet ökar genialiteten.

Edith Södergran




Top
< Din uppgift ADO>
© Anders Enges, Vörå 2002  | 15.10.01 14:26 Visa asp koden