SQL for begyndere

Tags:    databaser
Skrevet af Bruger #285 @ 25.10.2003

Introduktion


I denne artikel vil jeg prøve at beskrive SQL (udtales "ess-que-el") på begynderniveau. SQL står for Structured Query Language, og er et sprog til at kommunikere med databaser – som fx MySQL, MSSQL, Access etc. Man kommunikerer via noget, der hedder forespørgsler – man bruger dog oftest det engelske ord, query: one query, a lot of queries.

SQL er ikke casesensitive – det betyder, at det er lige meget, om du skriver SQL-kommandoen med stort eller småt. Jeg plejer – for læsevenlighedens skyld – at skrive reserverede ord med stort. Du kan se eksempler på dette i de kommende afsnit.

Jeg har ved nogle syntakser brugt skarpe parenteser [ og ] – det angiver, som ved alle andre ting, at det er valgfrit at angive det, der er i den skarpe parentes.


4 grundlæggende handlinger


Når man arbejder med databaser, er der 4 handlinger, man kan udføre. Disse er:
- SELECT (udtræk af data fra tabel)
- INSERT INTO (indsættelse af data i tabel)
- UPDATE (opdatér data i tabel)
- DELETE (slet data i tabel)

Det er disse 4 handlinger, jeg vil gennemgå overfladisk i denne artikel, så man kan lave de mest basale ting i forbindelse med databasekommunikation.


Kriterier


WHERE
Der er en ting, man bruger meget i SQL – nemlig WHERE. Dette er til at give kriterier til SQL-forespørgslerne. Fx kriterier, der er for de data, der skal:
- udtrækkes
- opdateres
- slettes

Som den opmærksomme læser har opdaget – det er dig! :) – svarer det til 3 af de førnævnte handlinger. Man bruger altså næsten altid WHERE, medmindre, at man ønsker alle data i den angivne tabel manipulerede af den handling, man kører. Med WHERE kan man vælge, at bestemte kolonner i databasen skal være:
< (mindre end)
<= (mindre eller lig med)
= (lig med)
>= (større eller lig med)
> (større end)
<> (forskelligt fra)
LIKE (her kan man søge efter et mønster)
BETWEEN (mellem et inklusivt område – kaldet inclusive range)

LIMIT
LIMIT bruges også til at begrænse sit udtræk af data. Hvor WHERE bruges til at hente data, der opfylder kriterier, så bruges LIMIT til at beskære det udsnit af data, ens forespørgsel (query) ellers ville returnere. Hvis ens query ville resultere i, at man fik fx 10 rækker (rows) returneret, så kan man med LIMIT sige, at man kun fx ønsker de 5 af rækkerne.

Syntaksen for LIMIT er således:
Fold kodeboks ind/udKode 
Det betyder, at hvis man angiver et kriterium, så er det antallet af rækker, man ønsker returneret. Hvis man giver to kriterier, med komma som separator, så er det første kriterium, hvilken række i de returnerede rækker, man starter ved, og nummer to, hvor mange rækker fra startrækken man ønsker at få med. Startrækken kaldes ofte offset. Man kan begrænse det førnævnte eksempel således:
Fold kodeboks ind/udKode 


ORDER BY
Dette er en kommando, man kan bruge til at vælge, hvordan rækker (kaldes ofte rows), man får returneret fra en query, skal sorteres.

Syntaksen for ORDER BY er således:
Fold kodeboks ind/udKode 
kolonne beskriver, hvilken kan ønsker, der primært skal sorteres efter.
[DIRECTION] er retningen på sorteringen. ASC betyder, at det sorteres ascending (på dansk: opadgående – også sagt på en anden måde: mindste er øverst og største nederst). DESC betyder det omvendte af ASC: her er det største øverst, og det mindste nederst. Hvis man ikke skriver noget, så bliver det sorteret ascending.


SELECT


Den simple syntaks for SELECT er:
Fold kodeboks ind/udKode 
Ved dette får man alle rækker og alle kolonner i tabel.

Man kan også vælge kun at tage nogle af kolonnerne, men stadig alle rækkerne, da der stadig ikke er nogen WHERE-clause på (betyder WHERE-betingelse):
Fold kodeboks ind/udKode 
Her vælges kun kolonnerne navn, tlf og skonummer.

Hvis man fx kun ønsker navnet og telefonnummeret på de personer, der bruger nummer 44 i sko, kan man gøre det således:
Fold kodeboks ind/udKode 
Her fås en liste over de personer, der bruger nummer 44. Hvis man ønsker dem, der bruger nummer 44 i sko og hvis navn starter med A, og de skal sorteres i alfabetisk rækkefølge efter navnet:
Fold kodeboks ind/udKode 
Her betyder navn LIKE ’A%’, at navnet skal starte med A, og vi er ligeglade med, hvad der kommer bagefter – det er tegnet %, der markerer det. Grunden til, at der er ’ omkring er, at det er en streng (string), vi arbejder med.

Nu vil jeg gerne have en liste med 5 personer, der har 55 i deres telefonnummer. Måden, vi vælger de 5 på er, at vi vil have dem, der har største fødder:
Fold kodeboks ind/udKode 



INSERT INTO


Denne handling bruges til at indsætte noget data i vores tabel. Hvis der ikke er noget i tabellen, så kan vi jo heller ikke hive noget ud med SELECT.

Syntaksen for INSERT INTO er således:
Fold kodeboks ind/udKode 
Et par eksempler kan være, at jeg vil sætte nogle personer ind, med oplysninger om telfonnumre og skonumre:
Fold kodeboks ind/udKode 
Jeg kan også sætte blot et navn ind, hvis jeg endnu ikke kender hans telefonnummer og skonummer:
Fold kodeboks ind/udKode 
Husk igen at bruge ’ ved strenge (strings).

Man behøver ikke nødvendigvis at angive kolonnerne, men jeg anbefaler stærkt, at man gør, som jeg har beskrevet.


UPDATE


Denne handling bruges til at opdatere data i vores tabel. Syntaksen er:
Fold kodeboks ind/udKode 
Nu kan jeg opdatere Bonanzas record i tabellen:
Fold kodeboks ind/udKode 
Denne opdatering opdaterer alle, hvis navn er Bonanza. Man kan også sikre sig, at der kun sker fx en opdatering:
Fold kodeboks ind/udKode 
Nu får jeg lige pludselig den idé, at de 5 med de største sko og med navnet sorteret alfabetisk, skal have et øgenavn (jeg har selv store fødder :)):
Fold kodeboks ind/udKode 
Nu kommer de 5 med de største fødder til at hedde fx:
Jens aka BIGFOOT
Peter aka BIGFOOT
Michael aka BIGFOOT
Anne aka BIGFOOT
Kasper aka BIGFOOT

Dette er testet i MySQL, hvor CONCAT er en funktionen, der klistrer strenge sammen (her det originale navn med et statisk streng). Jeg ved ikke, om det virker i andre typer.


DELETE


Denne handling bruges til at slette records i tabellen med. Syntaksen for denne er:
Fold kodeboks ind/udKode 
Denne bruges på samme måde som fx UPDATE, hvor man blot sletter records i stedet for at opdatere dem. Man kan fx slette de 5, der har mindst fødder:
Fold kodeboks ind/udKode 
Man kan også slette dem med øgenavnet BIGFOOT:
Fold kodeboks ind/udKode 



Læs mere


En god side, hvor man kan finde mere om SQL er http://www.mysql.com, der beskriver nærmere om MySQL’s indbyggede muligheder.

Man kan også læse andre tutorials som fx W3Schools’, der er at finde på http://www.w3schools.com/sql/default.asp

Og til sidst, men slet ikke mindst, er Google (http://www.google.dk) jo stadig din ven ;)

Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (19)

User
Bruger #3530 @ 25.10.03 18:10
Glimrende artikel, til nybegyndere såvel som lidt mere erfarne udviklere :)

Den er god at starte på og faktisk også god at bruge som opslagsværk så...thumbs up :D
User
Bruger #714 @ 27.10.03 16:17
Vil lige tilføje www.webcafe.dk som et godt sted at lære mere om sql, endda på dansk :-D.
User
Bruger #2730 @ 31.10.03 08:38
Måske skulle du tage udgangspunkt i SQL92 syntaksen i stedet for at bruge mySQL varianten. Eksempelvis bruges der ikke LIMIT i sql92, men derimod TOP kommandoen. Artiklen kan kun bruges som en reference til MySQL og ikke til almindeligt SQL som til eksempelvis MS Access eller MS SQL Server. Ellers et godt lille indblik i hvad sql KAN være.
User
Bruger #285 @ 31.10.03 09:05
Det vil jeg måske give dig ret i (læs: det vil jeg give dig ret i). I stedet skulle den nok hedde
"MySQL for begyndere"... Men valgte den syntakts, da mange jo bruger MySQL. Men point taken fra din side - jeg giver dig ret.
User
Bruger #4930 @ 23.12.03 21:18
Jeg vil sige, at hvis man ligesom jeg, ikke er så øvet inde for computerverdenen når det handler om databaser, så kunne det godt forklares lidt mere detaljeret. Måske skulle det egentlig hedde: "MySQL for gamle-begyndere" eller noget i den stil.
Men jeg kæmper videre med databaserne. :)

God jul!
User
Bruger #5010 @ 07.01.04 23:14
Ja, vil give Jonas ret. Det er ikke helt for begyndere. Måske er det blot mig der er fatlam* men jeg er stadigt ikke helt klar over hvad denne data-base er for en "underlig-substans"......hvor ligger den osv?

Det skal dog også tilføjes at jeg er HELT grøn indenfor alt der har med databaser at gøre, men forsøger selvfølgelig at lære det :)

Mvh hoeks

*og ja, det hedder fatlam :)

User
Bruger #4833 @ 15.02.04 09:34
jeg kan ikke få det til at virke. kan det værre fordi jeg bruger MS ACCESS
User
Bruger #4966 @ 06.05.04 21:54
Måske en lidt ligegyldig kommentar :-P. Men jeg udtaler sql som:"æs-ku-æl"
User
Bruger #3275 @ 08.05.04 14:10
LOL Anders...que bliver vist til "ky" :D
User
Bruger #5458 @ 22.07.04 14:11
Nu har jeg brugt denne guide så mange gange, at jeg næsten ikke kan tillade mig ikke at skrive en kommentar. Den er dælme lækkert skrevet...
Et klart 5-tal herfra. Jeg bruger den tit til opslag, fordi den er så kort og nøjagtigt beskrevet, med syntakser og det hele, at det ikke kan betale sig at slå op i en bog, for at finde det man søger 8)

Tak for den.
User
Bruger #6331 @ 22.08.04 10:28
God guide! Jeg arbeider for tiden med en guide til SQL: http://sql.devsiden.info/ :)
User
Bruger #6410 @ 08.09.04 13:51
mega fed artikel tak for de gode oplysninger jeg kunne faktisk godt bruge det, hehe. det første jeg nogen sinde har lavet med sql og mysql, men har så fundet ud af at sql er et godt redskab til en hjemmside
User
Bruger #4304 @ 20.10.04 11:25
God artikel, men jeg bed lige fast i det først: "SQL (udtales "ess-que-el")" .. hehe ja det er jo den evige kamp. Men man kan jo også vælge at udtale det sequel, det er jo en smagssag :) Personligt bruger jeg altid sequel når jeg omtaler selve SQL sproget, og SQL i produkt sammenhæng: mSQL, MySQL, etc...

Men smagssag..
User
Bruger #6698 @ 24.10.04 02:58
Goddag,,, er der ikke nogle der kan hjælpe mig==?????? skal have lagt en ny database op på min mSQL men ved ikke hvordan jeg får fjernet mit gamle og får smidt det nye op?? nogle der kan hjælpe?????
User
Bruger #6904 @ 08.12.04 01:58
Ang. Brian Hvarregaard's kommentar: Jeg er enig i, at artiklen burde hedde "MySQL" for begyndere, fordi den er fuld af MySQL-ismer.

- Men det er _ikke_ korrekt, at SQL-92 specificerer TOP til at skære toppen af resultatsæt. SQL-92 udtaler sig slet ikke om problematikken; først med SQL:2003 er der kommet en "officiel" tilgang til det. TOP er en MSSQL/Access-ting. Se http://troels.arvin.dk/db/rdbms/#select-limit

Et andet MySQL-specifikt element i artiklen er CONCAT, som ikke findes i SQL-standarden (der specificerer || operatoren til den slags). Se http://troels.arvin.dk/db/rdbms/#functions-concat
User
Bruger #6686 @ 08.07.05 04:11
Sikkert god til nybegyndere, men og rigtig god til opslag.. (:
User
Bruger #8953 @ 07.04.06 18:35
Først og fremmest.. Rigtig god aktikel! Jeg vil lige høre lidt omkring det med LIKE 'A%'.. Kan man så også gøre det samme omvendt? Altså LIKE '%A%'. Jeg tænkte på det omkring i en søge funktion!
User
Bruger #11937 @ 06.06.07 11:40
hey er der nogen der gider at give et link til det rigtige MySQL altså det man skal bruge til SQL FOR NYBEGYNDER MVH LASSE
User
Bruger #14630 @ 28.01.09 11:00
Hej alle sammen

Jeg ville lige dele et link med jer, dette er en god side til at lære sql online.

http://www.sqlguide.dk

Det er mig der står for siden, så hvis i har nogen idéer eller forslag vil jeg gerne høre dem.
Du skal være logget ind for at skrive en kommentar.
t