Data manipulation i SQL

 

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:

 

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:

 

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:

 

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”:

 

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”:

 

Der er flere forskellige sammenligningsoperatører, som man kan benytte i forbindelse med WHERE-erklæringen:

 

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:

 

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”:

 

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”:

 

 

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:

 

 

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:

 

Gå videre til Funktioner i SQL her →