Structured Query Language
- "SQL" omdirigeres hertil. For andre betydninger af SQL, se SQL (flertydig).
Structured Query Language eller SQL (navnet kan udtales både som enkelte bogstaver, S-Q-L, og som sequel) er det mest udbredte programmeringssprog til relationelle databaser. Det er blevet standardiseret i flere omgange som SQL-92 og SQL-1999, men de fleste databasesystemer har deres egne udvidelser. Sproget dækker både definition af databaser og manipulation af data. SQL er et deklarativt programmeringssprog, hvilket vil sige, at man kun beskriver, hvad der skal ske, men ikke hvordan det sker.
I SQL skelnes der ikke mellem store og små bogstaver, bortset fra i dataværdier. Kommentarer indledes med '--' og varer linjen ud. SQL-kommandoer kan afsluttes med ";", hvis der kommer flere efter hinanden.
Definition af databaser
redigérI denne del af SQL bruges generelt tre typer kommandoer: CREATE opretter noget, ALTER ændrer det og DROP fjerner det igen. Eksempel:
-- Opret en database med et par tabeller -- -- Databasen CREATE DATABASE demo; -- Adresseoplysninger CREATE TABLE adresser ( adresse_id INTEGER PRIMARY KEY, gade VARCHAR(40) NOT NULL, husnr INTEGER NOT NULL, sted VARCHAR(20), -- Etage, landsby mv. postnr INTEGER NOT NULL REFERENCES postnumre (postnr) );
I eksemplet er adresse_id nøglen, der skal være unik i tabellen. Gade er et tekstfelt, der er op til 40 tegn langt. Feltet skal udfyldes. Husnr er et heltal, der skal udfyldes. Det er valgfrit om feltet sted udfyldes. Feltet postnr skal være udfyldt, og der skal være et postnr i tabellen postnumre med samme værdi. Hvis disse krav ikke er opfyldt, kan data ikke indsættes i tabellen.
Med SQL er det muligt, at definere indekser for en tabel. Et index kan sikre, at enkelte felters data er unikke i en tabel. I eksemplet er adresse_id unik. Et andet argument for at oprette et indeks er, at det i nogle tilfælde kan give hurtigere læseadgang. Prisen er, at oprettelse og opdatering af data bliver en anelse langsommere fordi både tabel og indeks skal opdateres.
Datamanipulation
redigérI en tabel i en database kan data oprettes, ændres, læses og slettes.
Læsning af data
redigérLæsning foregår med kommandoen SELECT. I kommandoen beskrives, hvilke kolonner, der skal læses, hvilke tabeller, der skal læses fra, og hvilke betingelser der skal være opfyldt for at en række bliver læst. Eksempel:
SELECT gade, husnr, sted FROM adresser WHERE postnr = 7100;
Gade, husnummer og sted vises for adresser med 7100 som postnummer. Rækkefølgen er ikke defineret og dubletter kan forekomme.
Sortering af data udføres med delsætningen ORDER BY. Delsætningen sættes efter WHERE:
SELECT gade, husnr, sted FROM adresser WHERE postnr = 7100; ORDER BY sted
Der sorteres efter sted (stigende rækkefølge). Ønsker man faldende rækkefølge (største værdier først), sættes nøgleordet DESC efter feltnavnet:
SELECT gade, husnr, sted FROM adresser WHERE postnr = 7100; ORDER BY sted DESC
Der kan angives flere felter i ORDER BY-linjen:
SELECT gade, husnr, sted FROM adresser WHERE postnr = 7100; ORDER BY sted DESC, gade
Her sorteres først på sted i faldende rækkefølge og herefter på gade i stigende rækkefølge.
Indsættelse af data
redigérData indsættes i en tabel med kommandoen INSERT. Eksempel:
INSERT INTO adresser VALUES (14, 'Prinsessegade', 57, NULL, 7000);
Værdierne anføres i samme rækkefølge, som de er defineret i tabellen. Ofte vil man angive feltnavnene i en INSERT-forespørgsel:
INSERT INTO adresser (adresseID, gade, nr, bogstav, postnr) VALUES (14, 'Prinsessegade', 57, NULL, 7000);
Når man angiver feltnavnene, er det ikke nødvendigt at medtage alle felter i tabellen. De felter man ikke medtager i feltlisten, bliver tildelt værdien NULL eller en standardværdi for feltet hvis en sådan er defineret:
INSERT INTO adresser (gade, nr, postnr) VALUES ('Prinsessegade', 57, 7000);
Det er også muligt at bruge en SELECT-forespørgsel som kilde til en INSERT-forespørgsel:
INSERT INTO adresser (gade, nr, postnr) SELECT gade, nr, postnr FROM nyeadresser;
Her indsættes indholdet af tabellen nyeadresser ind i tabellen adresser. Denne type forespørgsel kan indsætte en eller flere poster, alt efter hvor mange der returneres af SELECT-forespørgslen i udtrykket.
Opdatering af data
redigérVed opdatering anføres en tabel, en liste af de værdier, som skal ændres, og et udvælgelseskriterie. Eksempel:
UPDATE adresser SET sted = 'St. tv.', gade = 'Husumgade' WHERE adresse_id = 14;
Det er vigtigt at sikre at udvælgelseskriteriet er korrekt før man udfører forespørgslen – handlingsforespørgsler (som INSERT, UPDATE og DELETE) udføres med det samme, og der er normalt ingen fortrydelsesfunktion.
I visse tilfælde er det ønskeligt at opdatere mange felter på én gang. Det kan fx være et postnr der er ændret:
UPDATE adresser SET postnr = 1245 WHERE postnr = 1259
Det er også muligt at opdatere med en beregnet værdi:
UPDATE varer SET pris = pris * 1.10
Her opdateres en varetabel så alle priser sættes 10 % op.
Sletning af data
redigérSletning af data udføres med kommandoen DELETE, der som input har et tabelnavn og et kriterium for, hvilke rækker der skal slettes. Eksempel:
DELETE FROM adresser WHERE adresse_id = 14;
Da adresse_id er unik i tabellen slettes kun en række. "DELETE FROM adresser;" sletter alle rækker uden advarsel.
Brugerrettigheder
redigérMed SQL er det muligt at tildele forskellige rettigheder til de forskellige brugere af databasen. Der kan gives rettigheder til læsning, indsættelse, ændring og sletning af data. Eksempel:
-- Hugo må gøre alt ved databasen demo GRANT ALL ON demo TO Hugo; -- Karl må læse i adressetabellen GRANT SELECT ON adresser TO Karl;
Rettigheder kan trækkes tilbage med kommandoen REVOKE. Brugere kan eventuelt få rettigheder til at give andre rettigheder, der svarer til dem, de selv har.
Se også
redigérEksterne henvisninger/Kilder
redigér- Fundamentals of database systems af Ramez Elmasri og Shamkant Navathe ISBN 0-8053-1753-8
- W3schools – SQL
- SQLGuide.dk – Din Online Guide Til SQL Arkiveret 31. august 2011 hos Wayback Machine