Delspørringer og views
Delspørringer og views
av Ole Petter den 3. januar 2020
Sist oppdatert: 7 januar, 2020 kl 16:30I SQL som i andre programmeringsspråk er valgspørringer avhengig av betinget logikk. Hvis en betingelse er usann, slår neste betingelse inn.
Dersom man ønsker å finne en vare som koster mindre enn 400 kr, kan en spørring se slik ut:
SELECT id, varenavn, pris FROM produkter
WHERE pris < 400;
Valguttrykk
Valguttrykk kan brukes til å lage avanserte spørringer, hvor man kan for eksempel klassifisere ulike elementer i tabeller.
En vare som koster under 400 kr kan karakteriseres som billig, mens en vare mellom 400-800 kr kan karakteriseres som standardpris, og en vare som koster over 800 kr kan karakteriseres som dyr.
SELECT id, varenavn, pris,
CASE
WHEN pris < 400 THEN 'billig'
WHEN pris <= 800 THEN 'standard'
WHEN pris > 800 THEN 'dyr'
END AS prisklasse
FROM produkter
CASE uttrykket i SQL brukes for å sjekke ulike tilstander, og returnerer en verdi hvis uttrykket er sant. Hvis ‘pris < 400’ så returneres verdien ‘billig’, og spørringen avsluttes. Hvis pris er høyere enn 400 men lavere enn 800, går den videre til neste WHEN-grein også videre helt til uttrykket slår inn.
Views (visninger)
En visning er en virtuell tabell basert på et sett med SQL-spørringer. En visning eller view inneholder rader og kolonner akkurat som en vanlig tabell. Feltene i en visning inneholder feltene fra en eller flere tabeller i en database.
Det går an å legge til funksjoner, WHERE og JOIN-setninger i en visning, og vise dataene som om de kom fra en enkelt tabell.
Eksempel på opprettelsen av en VIEW:
CREATE VIEW oversikt (id, varenavn, kategori, pris) AS
SELECT varer.id, varenavn, kategorier.kategori, pris
FROM varer, kategorier
Denne visningen gir følgende resultat:
Visninger kan altså brukes til å få en oversikt over flere sammenkoblede tabeller, og man kan se visningene om igjen ved behov, man slipper å opprette en ny spørring hver gang.
En visning er altså ikke en kopi av en eksisterende tabell, den er en oversikt eller et filter som man kan se tabellen(e) gjennom. I dette eksempelet har jeg tatt med alle kolonnene, bortsett fra id-kolonnen i kategorier-tabellen.
Oversikt over tabellene «kategorier» og «varer»:
Problemløsning og visninger
Det er mulig å dele visninger i enklere spørringer i SQL, teknikken bygger på at det er mulig å lage spørringer mot visninger.
Man kan spørre etter data mot visninger som mot tabeller, for eksempel ved at etter en spørring får man informasjon, som man kan gjennomføre nok en spørring mot.
Hvis man vil finne nøyaktig antall varer i en tabell, kan man bruke DISTINCT.
SELECT COUNT(DISTINCT id) FROM varer
Siden ikke alle former for SQL støtter denne typen spørringer, kan man bruke en alternativ metode. Ved hjelp av en støttetabell som inneholder kategorien til varene, ville en spørring sett omtrent slik ut:
SELECT COUNT(*) AS Antall_Varer
FROM Alle_Varer
Og støttetabellen ville blitt opprettet slik:
CREATE VIEW Alle_Varer AS
SELECT DISTINCT varenavn FROM varer
Spørringer mot visninger
Det går an å utføre spørringer mot visninger også, ikke bare vanlige tabeller.
SELECT varenavn, pris FROM oversikt WHERE pris > 100
Følgende spørring gjøres mot visningen som ble opprettet tidligere, «oversikt», og viser at med helt vanlige spørringer kan man hente ut relevant data fra en visning.