67
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
WHEREDer 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)
LIMITLIMIT 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:
LIMIT [start,] antal_rows
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:
LIMIT 5
ORDER BYDette 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:
ORDER BY kollonne [DIRECTION]
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:
SELECT * FROM tabel
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):
SELECT navn, tlf, skonummer FROM tabel
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:
SELECT navn, tlf FROM tabel WHERE skonummer = 44
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:
SELECT navn, tlf FROM tabel WHERE skonummer = 44 AND navn LIKE ’A%’ ORDER BY navn
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:
SELECT navn, tlf, skonummer FROM tabel WHERE tlf LIKE ’%55%’ ORDER BY skonummer DESC LIMIT 5
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:
INSERT INTO tabel (kol_1, kol_2, …) VALUES (vaerdi_1, vaerdi_2, …)
Et par eksempler kan være, at jeg vil sætte nogle personer ind, med oplysninger om telfonnumre og skonumre:
INSERT INTO tabel (navn, tlf, skonummer) VALUES (’Anders And’, ’555’, ’44’)
INSERT INTO tabel (navn, tlf, skonummer) VALUES (’mikl-dk’, ’40******’, ’46’)
Jeg kan også sætte blot et navn ind, hvis jeg endnu ikke kender hans telefonnummer og skonummer:
INSERT INTO tabel (navn) VALUES (’Bonanza’)
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:
UPDATE tabel SET kol_1=vaerdi_1 [, kol_2=vaerdi_2[, …]] [WHERE betingelse] [ORDER BY sortering] [LIMIT antalsbegrænsing]
Nu kan jeg opdatere Bonanzas record i tabellen:
UPDATE tabel SET tlf=’158755’, skonummer=21 WHERE navn = ’Bonanza’
Denne opdatering opdaterer alle, hvis navn er Bonanza. Man kan også sikre sig, at der kun sker fx en opdatering:
UPDATE tabel SET tlf=’158755’, skonummer=21 WHERE navn = ’Bonanza’ LIMIT 1
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
):
UPDATE tabel SET navn=CONCAT(navn, ’ aka BIGFOOT’) ORDER BY skonummer DESC LIMIT 5
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:
DELETE FROM tabel [WHERE betingelse] [ORDER BY sortering] [LIMIT antalsbegrænsing]
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:
DELETE FROM tabel ORDER BY skonummer LIMIT 5
Man kan også slette dem med øgenavnet BIGFOOT:
DELETE FROM tabel WHERE navn LIKE ‘%BIGFOOT%’
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.aspOg 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)
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
Vil lige tilføje www.webcafe.dk som et godt sted at lære mere om sql, endda på dansk :-D.
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.
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.
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!
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
jeg kan ikke få det til at virke. kan det værre fordi jeg bruger MS ACCESS
Måske en lidt ligegyldig kommentar :-P. Men jeg udtaler sql som:"æs-ku-æl"
LOL Anders...que bliver vist til "ky"
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.
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
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..
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?????
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-limitEt 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
Sikkert god til nybegyndere, men og rigtig god til opslag.. (:
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!
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
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.dkDet 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.