Data manipulation i SQL
Indhold på denne side
I dette afsnit om data manipulation vil den samme tabel blive benyttet som eksempel under alle punkterne. Tabellen hedder “Yndlingssange” og har kolonnerne “ID”, “Sang”, “Kunstner”, “Album” og “Genre”. Tabellen kan ses her:
ID | Sang | Kunstner | Album | Genre |
---|---|---|---|---|
1 | Runaway | Kanye West | My beautiful Dark Twisted Fantasy | Hip-Hop |
2 | Smells Like Teen Spirit | Nirvana | Nevermind | Grunge |
3 | One More Time | Daft Punk | Discovery | French house |
4 | Ung For Evigt | L.O.C. | Libertiner | Hip-Hop |
5 | The Morning | The Weeknd | House of Balloons | Alternative R&B |
6 | Pyramids | Frank Ocean | Channel Orange | Alternative R&B |
7 | 7 Rings | Ariana Grande | thank u, next | Trap-pop |
8 | Kiss It Better | Rihanna | ANTI | Pop |
9 | White Ferrari | Frank Ocean | Blonde | Alternative R&B |
10 | Moonage Daydream | David Bowie | The Rise and Fall of Ziggy Stardust and the Spiders from Mars | Glam rock |
Indlæs data (SELECT)
For at indlæse data i en bestemt tabel skal man benytte følgende erklæring, som vil fremvise en tabel med den valgte data:
SELECT kolonne_1, kolonne_2 FROM tabel;
- “kolonne” er navnet på den eller de kolonner som programmet skal indlæse
- “tabel” er navnet på den tabel som dataen skal indlæses fra
Bemærk at hvis man vil indlæse alle kolonner i tabellen kan man indsætte en stjerne (*) i SELECT-erklæringen.
Hvis man vil indlæse tabellen “Yndlingssange” (som kan ses øverst på siden), men kun ønsker information om navnet på sangen, kunstneren og albummet, så kan man indtaste følgende i kodefeltet:
SELECT Sang, Kunstner, Album FROM Yndlingssange;
Det vil resultere i følgende skema:
Sang | Kunstner | Album |
---|---|---|
Runaway | Kanye West | My beautiful Dark Twisted Fantasy |
Smells Like Teen Spirit | Nirvana | Nevermind |
One More Time | Daft Punk | Discovery |
Ung For Evigt | L.O.C. | Libertiner |
The Morning | The Weeknd | House of Balloons |
Pyramids | Frank Ocean | Channel Orange |
7 Rings | Ariana Grande | thank u, next |
Kiss It Better | Rihanna | ANTI |
White Ferrari | Frank Ocean | Blonde |
Moonage Daydream | David Bowie | The Rise and Fall of Ziggy Stardust and the Spiders from Mars |
Indlæs unik data (DISTINCT)
Hvis man kun ønsker at indlæse alle unikke værdier (værdier som ikke gentager sig selv) i en tabel kan man benytte følgende erklæring:
SELECT DISTINCT kolonne_1, kolonne_2 FROM tabel;
- “kolonne” er navnet på den eller de kolonner som programmet skal indlæse
- “tabel” er navnet på den tabel som dataen skal indlæses fra
I tabellen “Yndlingssange” optræder kunstneren Frank Ocean to gange. Hvis man vil have en tabel hvor alle kunstnere kun optræder én gang skal man indtaste følgende i kodefeltet:
SELECT DISTINCT Kunstner FROM Yndlingssange;
Det vil resultere i nedenstående tabel, hvor Frank Ocean kun er inkluderet én gang:
Kunstner |
---|
Kanye West |
Nirvana |
Daft Punk |
L.O.C. |
The Weeknd |
Frank Ocean |
Ariana Grande |
Rihanna |
David Bowie |
Filtrer data (WHERE)
Det er muligt at indlæse filtreret data, som følger en bestemt betingelse ved at benytte nedenstående erklæring:
SELECT kolonne_1, kolonne_2 FROM tabel WHERE betingelse;
- “kolonne” er navnet på den eller de kolonner som programmet skal indlæse
- “tabel” er navnet på den tabel som dataen skal indlæses fra
- “betingelse” er den betingelse som skal filtrere tabellen, så den kun inkluderer de rækker der opfylder betingelsen
Der er forskellige muligheder for, hvad en betingelse kan være.
Den kan være rækker hvor en bestemt dataværdi er lig med eller ikke lig med en bestemt tekstværdi. I tabellen “Yndlingssange” kunne det f.eks. være alle de rækker hvor genren er Alternative R&B:
SELECT * FROM Yndlingssange WHERE Genre = 'Alternative R&B';
Det vil resultere i nedenstående tabel, som indeholder sangene “The Morning”, “Pyramids” og “White Ferrari”:
ID | Sang | Kunstner | Album | Genre |
---|---|---|---|---|
5 | The Morning | The Weeknd | House of Balloons | Alternative R&B |
6 | Pyramids | Frank Ocean | Channel Orange | Alternative R&B |
9 | White Ferrari | Frank Ocean | Blonde | Alternative R&B |
Betingelsen kan også være rækker hvor dataværdien er højere end, lig med, ikke lige med eller mindre end en bestemt talværdi. I tabellen “Yndlingssange” kunne det f.eks. være alle de rækker, hvor ID’et er højere end 6:
SELECT * FROM Yndlingssange WHERE ID > 6;
Det vil resultere i nedenstående tabel, som indeholder sangene “7 Rings”, “White Ferrari”, “Kiss It Better” og “Moonage Daydream”:
ID | Sang | Kunstner | Album | Genre |
---|---|---|---|---|
7 | 7 Rings | Ariana Grande | thank u, next | Trap-pop |
8 | Kiss It Better | Rihanna | ANTI | Pop |
9 | White Ferrari | Frank Ocean | Blonde | Alternative R&B |
10 | Moonage Daydream | David Bowie | The Rise and Fall of Ziggy Stardust and the Spiders from Mars | Glam rock |
Der er flere forskellige sammenligningsoperatører, som man kan benytte i forbindelse med WHERE-erklæringen:
Operatør | Beskrivelse |
---|---|
= | Lig med |
< | Mindre end |
> | Mere end |
<= | Mindre end eller lig med |
>= | Mere end eller lig med |
!= | Ikke lig med |
BETWEEN | Mellem et område |
IN | Specificerer flere valgmuligheder for en kolonne |
Bemærk at SQL kræver at du benytter gåseøjne (” “) omkring tekstværdier, men ikke omkring talværdier.
Sorter data (ORDER BY)
Man kan sortere indholdet i en tabel i en bestemt rækkefølge ved at benytte følgende erklæring:
SELECT kolonne_1, kolonne_2 FROM tabel ORDER BY kolonne ASC/DESC;
- “kolonne” på SELECT-linjen er navnet på den eller de kolonner som programmet skal indlæse
- “tabel” er navnet på den tabel som dataen skal indlæses fra
- “kolonne” på ORDER BY-linjen er den kolonne som indholdet skal sorteres efter
- “ASC/DESC” bestemmer om indholdet skal sorteres i stigende (ASC) eller i faldende (DESC) rækkefølge
I nedenstående kodestykke sorterer vi tabellen “Yndlingssange” efter navnet på sangen i stigende rækkefølge. Det vil sige fra første til sidste bogstav i alfabetet:
SELECT * FROM Yndlingssange ORDER BY Sang ASC;
I det her tilfælde kunne man helt udelukke at skrive “ASC” da den som standard sorterer i stigende rækkefølge. Kodestykket vil indlæse en tabel, som ser sådan her ud:
ID | Sang | Kunstner | Album | Genre |
---|---|---|---|---|
7 | 7 Rings | Ariana Grande | thank u, next | Trap-pop |
8 | Kiss It Better | Rihanna | ANTI | Pop |
10 | Moonage Daydream | David Bowie | The Rise and Fall of Ziggy Stardust and the Spiders from Mars | Glam rock |
3 | One More Time | Daft Punk | Discovery | French house |
6 | Pyramids | Frank Ocean | Channel Orange | Alternative R&B |
1 | Runaway | Kanye West | My beautiful Dark Twisted Fantasy | Hip-Hop |
2 | Smells Like Teen Spirit | Nirvana | Nevermind | Grunge |
5 | The Morning | The Weeknd | House of Balloons | Alternative R&B |
4 | Ung For Evigt | L.O.C. | Libertiner | Hip-Hop |
9 | White Ferrari | Frank Ocean | Blonde | Alternative R&B |
Den kolonne som indholdet skal sorteres efter behøver ikke at være en af de kolonner som bliver indlæst.
I tilfælde af at der også er en WHERE-erklæring i koden, så skal man putte ORDER BY-erklæringen efter WHERE-erklæringen.
Navngiv data (AS)
Man kan omdøbe en kolonne eller en tabel med et påtaget navn ved at benytte følgende erklæring:
SELECT kolonne AS 'Nyt navn' FROM tabel;
- “kolonne” er navnet på den eller de kolonner som programmet skal indlæse
- “tabel” er navnet på den tabel som dataen skal indlæses fra
- “Nyt navn” er det navn som du vil omdøbe kolonnen til
Hvis man vil omdøbe kolonnen “Kunstner” til “Sanger” i tabellen “Yndlingssange” så skal man benytte følgende kodestykke:
SELECT Kunstner AS 'Sanger' FROM Yndlingssange;
Dette vil indlæse en tabel med kolonnen “Kunstner”, hvor kolonnenavnet er ændret til “Sanger”:
Sanger |
---|
Kanye West |
Nirvana |
Daft Punk |
L.O.C. |
The Weeknd |
Frank Ocean |
Ariana Grande |
Rihanna |
Frank Ocean |
David Bowie |
Bemærk at tabellens kolonner ikke bliver omdøbt permanent, men kun den tabel som bliver indlæst.
Indlæs data ud fra mønster (LIKE)
For at indlæse data med lignende værdier kan man benytte følgende erklæring:
SELECT kolonne_1, kolonne_2 FROM tabel WHERE kolonne LIKE 'mønster';
- “kolonne” på SELECT-linjen er navnet på den eller de kolonner som programmet skal indlæse
- “tabel” er navnet på den tabel som dataen skal indlæses fra
- “kolonne” på WHERE-linjen er den kolonne hvor programmet skal finde lignende værdier
- “mønster” er det mønster som programmet skal følge til at finde lignende værdier
Der er to forskellige tegn som kan definere mønsteret:
- % – procenttegn repræsenterer nul, et, eller flere tegn
- _ – Understreg repræsenterer et enkelt tegn
Det betyder at hvis man skal finde alle dataværdierne som ender med “e” skal man skrive “%e”, hvis man skal finde alle dataværdierne som starter med “The” skal man skrive “The%” og hvis man skal finde alle dataværdierne, hvor bogstavet “o” i “The Morning” kan substitueres med ethvert andet bogstav skal man skrive “The M_rning”.
Hvis vi skal indlæse tabellen “Yndlingssange” med alle de rækker hvor genren ender på “pop” skal man benytte følgende kodestykke:
SELECT * FROM Yndlingssange WHERE Genre LIKE '%pop';
Koden vil resultere i en tabel med sangene “7 Rings” som har genren “Trap-pop” og sangen “Kiss it Better” som har genren “Pop”:
ID | Navn | Kunstner | Album | Genre |
---|---|---|---|---|
7 | 7 Rings | Ariana Grande | thank u, next | Trap-pop |
8 | Kiss It Better | Rihanna | ANTI | Pop |
Begræns antal (LIMIT)
For at begrænse antallet af rækker som bliver indlæst skal man benytte følgende erklæring:
SELECT kolonne_1, kolonne_2 FROM tabel LIMIT antal_rækker;
- “kolonne” er navnet på den eller de kolonner som programmet skal indlæse
- “tabel” er navnet på den tabel som dataen skal indlæses fra
- “antal_rækker” er et nummer som indikerer antallet af rækker som skal indlæses
Hvis man vil nøjes med at indlæse 5 rækker fra tabellen “Yndlingssange”, så vil kodestykket se sådan her ud:
SELECT * FROM Yndlingssange LIMIT 5;
Følgende tabel vil blive indlæst:
ID | Sang | Kunstner | Album | Genre |
---|---|---|---|---|
1 | Runaway | Kanye West | My beautiful Dark Twisted Fantasy | Hip-Hop |
2 | Smells Like Teen Spirit | Nirvana | Nevermind | Grunge |
3 | One More Time | Daft Punk | Discovery | French house |
4 | Ung For Evigt | L.O.C. | Libertiner | Hip-Hop |
5 | The Morning | The Weeknd | House of Balloons | Alternative R&B |
Skab forskellige output (CASE)
Man kan skabe forskellige betingelser som fører til forskellige output ved at benytte følgende erklæring:
SELECT kolonne, CASE WHEN betingelse_1 THEN 'output_1' WHEN betingelse_2 THEN 'output_2' ELSE 'output_3' END FROM tabel;
- “kolonne” er navnet på den kolonne som programmet skal indlæse
- “tabel” er navnet på den tabel som dataen skal indlæses fra
- “betingelse” er den betingelse som skal give et bestemt output i den indlæste tabel
- “output” er den værdi som betingelsen skal indlæse i tabellen
En CASE-erklæring skal indeholde nøgleordene CASE og END imellem SELECT- og FROM-erklæringerne. Imellem CASE og END skal man opstille en eller flere CASE-betingelser samt det output som betingelserne skal resultere i.
Lad os sige at man vil dele sangene fra tabellen “Yndlingssange” op i tre spillelister: En pop spilleliste, en rock spilleliste og en spilleliste med alle andre sange i. Så kan man benytte følgende kodestykke:
SELECT Sang, CASE WHEN Genre = 'Hip-Hop' THEN 'Hip-Hop spilleliste' WHEN Genre = 'Glam rock' OR 'Grunge' THEN 'Rock spilleliste' ELSE 'Blandet spilleliste' END AS Spillelister FROM Yndlingssange;
Læg mærke til at “AS Spillelister” er blevet tilføjet til kodestykket, så kolonnen bliver navngivet “Spillelister”. Dette kodestykke vil indlæse følgende tabel:
Sang | Spillelister |
---|---|
Runaway | Hip-Hop spilleliste |
Smells Like Teen Spirit | Rock spilleliste |
One More Time | Blandet spilleliste |
Ung For Evigt | Hip-Hop spilleliste |
The Morning | Blandet spilleliste |
Pyramids | Blandet spilleliste |
7 Rings | Blandet spilleliste |
Kiss It Better | Blandet spilleliste |
White Ferrari | Blandet spilleliste |
Moonage Daydream | Rock spilleliste |