Beregninger og konstante værdier

I SQL-sproget kan du indsætte konstante værdier som en kolonne, og du kan lave beregninger direkte i en forespørgsel. Beregninger og indsættelse af konstante kolonneværdier er nyttigt i flere situationer. Enten fordi der er krav om, at der leveres eksempelvis en pris med moms, men værdien er skrevet uden moms. Eller der kan være et ønske om, at alle rækker har en kolonne med en bestemt oplysning, f.eks. for at identificere data i forbindelse med samkøring af data fra flere kilder.

Når du ændrer en kolonnes oprindelige værdi eller indsætter en kolonne med konstant værdi, vil SQL Server ikke længere give dig navnet på kolonnen. Det er der umiddelbart to grunde til: For det første kan det give dataforvirring, hvis en kolonne har samme navn, men en ny værdi, og for det andet kan beregningen indeholde flere kolonner, og det er så ikke tydeligt hvilket kolonnenavn, der skal bruges. Derfor navngiver/omdøber jeg konsekvent kolonner, der laves beregninger på. Se mere om at omdøbe og navngive kolonner i denne lektion.

Sådan beregner du moms på priskolonne

Et ganske åbenlyst eksempel er at lave en momsberegning af priskolonnen i varetabellen. Momsen i Danmark (i skrivende stund) er 25%. Vi skal altså gange prisen med 1,25. Gangetegnet i SQL Server er *. Det skal ikke forveksles med * i forbindelse med visning af alle kolonner i en SELECT.

SELECT
  Varenr,
  Varebetegnelse,
  Pris PrisUdenMoms,
  Pris*1.25 PrisMedMoms
FROM Vare

Konstante værdier i en kolonne

Det kan være nødvendigt eller bare praktisk at have en eller flere kolonner med kontante værdier i. Det er supernemt, du skal bare skrive værdien som var det et felt. Tekstværdier skal skrives i apostroffer.

Dette eksempel skriver en kolonne med teksten Boblekuvert TILBUD og laver dertil en kolonne med værdien 50, som er den rabatprocent, der ydes. Selvfølgelig beregnes prisen også.

SELECT
  'Boblekuvert TILBUD' Tilbudsinformation,
  50 Rabatprocent,
  Varebetegnelse,
  Pris NormalprisUdenMoms,
  Pris*0.5 TilbudsprisUdenMoms
FROM Vare
WHERE Varenr LIKE 'BOBA%'

Tekstfelter kan også manipuleres

Du kan også manipulere tekstfelter, f.eks. ved at lægge en tekst til, eller bruge en tekstfunktion til at afkorte eller på anden måde ændre værdien. Her skriver vi Halv pris! foran varebetegnelsen.

SELECT
  'Boblekuvert TILBUD' Tilbudsinformation,
  'Halv pris! ' + Varebetegnelse Varebetegnelse,
  Pris NormalprisUdenMoms,
  Pris*0.5 TilbudsprisUdenMoms
FROM Vare
WHERE Varenr LIKE 'BOBA%'

Regnearter og funktioner

SQL Server kender de almindelige regnearter og har en masse indbyggede funktioner til forskellige formål. Denne forespørgsel viser de fire regnearter og eksempler på et par indbyggede funktioner.

  • SIGN(værdi): Viser fortegnet af værdien. -1 negativ, 0 nul, 1 positiv.
  • ROUND(værdi, antaldecimaler): afrunder værdien til det ønskede antal decimaler.
  • RAND(): viser et tilfældigt tal mellem 0 og 1. Bemærk, at der ikke beregnes en ny værdi i hver række!
SELECT
  Pris,
  Pris*2 Multiplikation,
  Pris/2 Division,
  Pris+2 Addition,
  Pris-0.2 Subtraktion,
  SIGN(Pris) FortegnPostiv,
  SIGN(-Pris) FortegnNegativ,
  SIGN(0) FortegnNul,
  ROUND(Pris/7, 4) Afrund4decimaler,
  ROUND(Pris/7, 2) Afrund2decimaler,
  RAND() Tilfældig
FROM Vare
WHERE Varenr LIKE 'BOBA%'

Prøv selv

  • I Ordrelinje-tabellen er der antal, pris og rabat (i kroner pr. enhed). Lav en kolonne, der viser totalen.
  • Lav en forespørgsel med en Varebetegnelse-kolonne, hvor varenummer skrives i parentes efter varebetegnelsen. Kolonnens navn skal stadig være Varebetegnelse.
  • Funktionen DATEDIFF beregner tidsrum mellem to datoer. Første parameter er enheden. Brug DATEDIFF(enhed, dato1, dato2) og GETDATE() til at finde ud af, hvor mange dage (parameter hedder d), der er siden ordrerne i Ordre-tabellen er oprettet.
    I løsningen i videoen er der også løsning på antal timer, uger og måneder.

Omdøbe felter og tabeller med AS

SQL-sproget har en indbygget kommando til at omdøbe felter og tabelnavne i resultatet. Det sker med AS-kommandoen. Som du skal se, tillader SQL endda, at du sparer de par tastetryk, der skal til at skrive AS.

Omdøbning af tabelnavne er i sandhed en stor fordel, når man arbejder med flere tabeller. Se nærmere i kapitlet om JOIN (link kommer). Men det er også en måde at give et navn til en kolonne i et resultat med beregnede værdier.

Sådan omdøbes felt eller kolonne i SQL

I SQL skriver du AS og det nye navn lige efter kolonne- eller tabelnavn.

SELECT
  Kolonne1 AS Nytkolonne1navn,
  Kolonne2 AS Nytkolonne2navn
FROM Tabel AS Nyttabelnavn

I dette eksempel omdøbes feltet Navn i Kunde-tabellen til Kundenavn. Feltet Bynavn påvirkes ikke.

SELECT Navn AS Kundenavn, Bynavn
FROM Kunde

Tabellen kan omdøbes sådan her, men det ses ikke umiddelbart i resultatet.

SELECT Navn
FROM Kunde AS Kundetabel

Brug af kvalificeret navngivning med punktum

Senere, når vi arbejder med flere tabeller i en forespørgsel bliver det nødvendigt at angive eksakt feltnavn ved at henvise til tabelnavn og feltnavn på én gang. Det kalder vi for kvalificeret navngivning. Ved at skrive tabelnavn et punktum og dernæst kolonnenavn, fortæller du SQL, at du vil have kolonnen i den specifikke tabel.

SELECT Tabel.Kolonne1, Tabel.Kolonne2, Tabel.*
FROM Tabel

Eksempel: Vis kolonnen Navn i tabellen Kunde:

SELECT Kunde.Navn
FROM Kunde

Omdøbning af tabel og kvalificeret navngivning

I forbindelse med kvalificeret navngivning bliver det meget relevant, hvad man har omdøbt tabellen til. Se dette klip fra SQL Server Management Studio. De røde streger antyder, at Kunde.Navn ikke kan findes.

Du får en fejl, hvis du kører forespørgslen:

Msg 4104, Level 16, State 1, Line 18
The multi-part identifier "Kunde.Navn" could not be bound.

Den korrekt måde er at bruge det navn, der er angivet efter AS ved tabellen.

SELECT Kundetabel.Navn
FROM Kunde AS Kundetabel

Resultatet er det samme som tidligere.

Du behøver ikke skrive AS

SQL tillader, at du udelader ordet AS. Så du kan faktisk gøre sådan her. Bemærk brugen af kvalificeret navngivning, hvor Kunde-tabellen er omdøbt til K.

SELECT K.Navn Kundenavn,
  K.Adresse1 Vej1,
  K.Adresse2 Vej2,
  K.Postnr Postnummer
FROM Kunde K

Prøv selv

  • Vis rækker fra Vare-tabellen med kolonnenavne, der kun er på ét bogstav.
  • Vis kolonnerne Navn, Email og Telefon fra Kundeemne-tabellen med kvalificeret navngivning, giv Kundeemner-tabellen navnet E.
  • Omdøb kolonnerne til hhv. Firmanavn, Emailadresse og Telefonnummer – brug AS.

NOT i forespørgsel

Vi har endnu en logisk operator i SQL Server. Du har faktisk allerede mødt NOT et par gange. Se evt. lektionen om NULL, hvor NOT bliver brugt. I kombination med andre logiske operatorer, som AND og OR, er NOT i stand til at forfine dine betingelser i SQL-forespørgslerne.

Den logiske operator NOT

Denne operator vender resultatet af et udsagn fra SAND til FALSK eller omvendt. Eksempler:

1=2 – er FALSK
NOT 1=2 – er SAND
1<>2 – er SAND
NOT 1<>2 – er FALSK

NOT-operatoren bruges på denne måde i SQL:

SELECT Navn, Bynavn FROM Kunde
WHERE NOT Bynavn = 'Viborg'

Husk dog i forbindelse med NULL, skrives NOT efter IS:

SELECT Navn, Email FROM Kunde
WHERE Email IS NOT NULL

Dette er faktisk også gyldigt og giver samme resultat:

SELECT Navn, Email FROM Kunde
WHERE NOT Email IS NULL

Du kan også udføre NOT på et udtryk, som allerede indeholder NOT, altså dobbelt negation:

SELECT Navn, Email FROM Kunde
WHERE NOT Email IS NOT NULL

Eller, hvis du har lyst til at gå amok i dobbeltnegation:

SELECT Navn, Bynavn FROM Kunde
WHERE NOT NOT Bynavn = 'Viborg'

Brug af NOT med AND og OR

Tingene kan blive lidt mere komplicerede, når vi blander NOT ind i andre betingelser med AND eller OR. Lad os finde varer, der hedder noget med Boble og som ikke koster mellem 1 og 2 kr.

Første forsøg er forkert, da NOT kun påvirker første betingelse:

SELECT * FROM Vare
WHERE
    Varebetegnelse LIKE 'Boble%'
    AND
    NOT Pris > 1 AND Pris < 2

I stedet skal vi indkapsle prisbetingelsen i parentes, hvorved NOT påvirker hele udtrykket:

SELECT * FROM Vare
WHERE
    Varebetegnelse LIKE 'Boble%'
    AND
    NOT (Pris > 1 AND Pris < 2)

Prøv selv

  • Find kunder ikke i Nyborg
  • Find kunder i Nyborg med gyldig email
  • Find papkasser, hvor prisen ikke er mellem 4 og 6 kr.

Klargør testmiljø

SQL Kursus er lavet med fokus på Microsoft SQL Server. Hvis du ikke har adgang til en Microsoft SQL Server til brug for dette kursus, kan du hente en gratis version hos Microsoft. Versionen hedder Microsoft SQL Server Express. Det er en fuld funktionsdygtig databaseserver med nogle få begrænsninger. Det er tilladt at bruge SQL Server Express i et produktionsmiljø, dog skal du være opmærksom på, at databasen ikke kan overstige 10 GB. Til vores undervisningsformål er den størrelse intet problem.

I denne artikel viser jeg dig, hvordan du får SQL Server Express op at køre og installerer Management Studio, som vi bruger til at skrive SQL-sætninger i. Til sidst indlæser du en backup af undervisningsdatabasen. Nu er du køreklar!

  • Første trin er at hente og installere serverprogrammet fra Microsoft.
  • Andet trin er at hente og installere SQL Server Management Studio.
  • Tredje trin er at forbinde til din Microsoft SQL Server Express og konstatere, at den kører.
  • Fjerde trin er at indlæse en backup af undervisningsdatabasen.
Videoen viser hele processen, som du kan læse om i detaljer herunder.

Hent og installer Microsoft SQL Server Express

  1. Find downloadsitet hos Microsoft. I skrivende stund (april 2020) er denne adresse gyldig: https://www.microsoft.com/en-us/sql-server/sql-server-downloads (åbner i ny fane) – hvis den adresse ikke længere fungerer, må du ty til internettets søgemaskiner og søge efter ”Download Microsoft SQL Server Express”.
  2. Vælg Basic-installation. Du får sikkert en besked om, at dansk ikke er understøttet som sprog. Jeg bruger den engelske version her i SQL Kursus. Svar Yes til at installere på engelsk.
  3. Accepter licensbetingelserne.
  4. Accepter installationsmappe eller vælg en anden, og gennemfør installationen.
  5. Bemærk oversigtsbilledet til sidst, her står navnet på din instans: SQLEXPRESS og hvem der kan administrere databasen – i mit tilfælde er det brugeren X på X-PC.
  6. Lad vinduet stå åbent, og gå til næste step for at installere SSMS.

Hent og installer SQL Server Management Studio (SSMS)

  1. Til sidst i installationen af SQL Server Express er der en knap til at hente Management Studio (SSMS), brug den gerne. Ellers skal du et smut forbi Microsofts hjemmeside for at hente programmet. SSMS er gratis, også til professionelt brug. Denne adresse virker nu (april 2020), https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms (åbner i ny fane) – hvis den ikke virker, når du forsøger, må du søge efter ”SQL Server Management Studio” på internettet.
  2. Installer programmet efter download, vælg installationsmappe, accepter betingelser m.m.
  3. Efter installation er du klar til at bruge det.

Forbind til databaseserver med Management Studio

  1. Start Management Studio.
  2. Det først, du skal tage stilling til er, hvilken database du vil forbinde til. Vælg her (hvis det ikke allerede er valgt) <dit computernavn>/SQLEXPRESS. Authentication skal være Windows Authentication.
  3. Klik på Connect.
  4. I venstre side skal du se dit databaseserverens navn (som i trin 2 ovenfor), der skal være et grønt symbol ved navnet for at vise, at databaseserveren kører.

Indlæs backup af kursusdatabasen

Bemærk, at denne process forudsætter, at du ikke har en SQLKursus-database i forvejen. Hvis du vil genindlæse backuppen for at starte på en frisk, skal du slette den eksisterende database først.

  1. Hent SQLKursus.bak fra denne side (åbner i ny fane). Hvis du henter ZIP-filen, skal du huske at pakke den ud, før du fortsætter.
  2. Flyt SQLKursus.bak til mappen, hvor SQL Server forventer at finde sine backupfiler. Det er som regel i mappen (bemærk MSSQL15.SQLEXPRESS – hvis du har en anden version, vil mappen hedde noget andet!):
    C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQL\Backup
  3. Du skal sikkert acceptere administratoradgang for at tilgå mappen.
  4. Højreklik på Databases, og vælg Restore Database.
  5. Klik Device.
  6. Klik på …-symbolet.
  7. Der vises en dialogboks, hvor du skal vælge mediet. Sørg for, at der står File i Backup Media Type, og tryk på Add.
  8. Du skal nu udpege den SQLKursus.bak-fil, du har hentet. Tryk OK.
  9. Du har nu valgt et backupmedie. Klik OK.
  10. Klik OK for at indlæse backup.

Du er nu klar til næste artikel, hvor du opretter din første forespørgsel.