SQL-(mini)reference

<< Click to Display Table of Contents >>

Navigation:  Programmets anvendelse > Udtræk > Bruger-SQL >

SQL-(mini)reference

Previous pageReturn to chapter overviewNext page

De mest almindelige SQL nøgleord og formuleringer

Intro til SELECT-udtryk

Alle SQL-udtræk begynder med nøgleordet SELECT specificeret med enten alle felter (SELECT *) eller med specifik angivelse af felter og rækkefølge adskilte med kommaer (SELECT Felt01, Felt02, etc.).
Herudover specificeres datakilden med et FROM fulgt af tabelnavn og evt. med et tabel-alias (FROM SKScomplete AS sks), hvor alias'et bruges som forkortet tabelreference andetsteds i udtrykket, hvis dette er nødvendigt.
Oftest tilføjes kriterier med et WHERE og en betingelse.
Slutteligt vil man ofte tilføje en sorteringsorden med et ORDER BY og et eller flere feltnavne.
SQL-udtryk afsluttes altid med et semikolon, der er specielt vigtigt, hvis man i samme script kører en sekvens af flere SQL-udtryk.
SQL-udtryk er ikke følsomme for linieskift, som derfor kan indsættes efter smag til den bedste overskuelighed.

Kommentarer

Det kan anbefales at indsætte forklarende kommentarer i SQL-udtryk for at lette forståelsen af udtrykket.
Kommentarer kan enten være flerliniede omgivet af /* */ eller enkeltlinie indledt med to bindestreger --.
/* Flerliniet
  kommentar */
-- Enkeltliniet kommentar
Der må ikke indsættes linieskift i enkeltliniede kommentarer (der jo så ikke længere er enkeltliniede!).
Kommentarer kan indsættes hvor som helst i SQL-udtryk.

Basale SQL-udtryk

Simple SQL selektionsudtryk vil altid have grundformen:
SELECT felt eller felter FROM tabelnavn eller tabelkilde;
og med komma mellem kolonnenavne, hvis der refereres mere end een kolonne.

Et simpelt SQL-udtryk ser f.eks. ud som hér:
SELECT SKSkode, KodeTekst
FROM SKScomplete;
eller et udtryk med udhentning af alle kolonner (angivet ved *):
SELECT *
FROM SKScomplete;
eller et udtryk med selektionsbetingelse og specifik sortering:
SELECT SKSkode, KodeTekst
FROM SKScomplete
WHERE DatoSlut > CURRENT_DATE
ORDER BY SKSkode;
der hér selekterer på kun gældende SKSkoder (DatoSlut vil i dette tilfælde selektere på fremtidige kodeophør).
Rækkefølgen af SELECT, FROM, WHERE og ORDER BY er obligat.

Søgning på en specifik liste af værdier kan f.eks. være:

SELECT SKSkode, KodeTekst
FROM SKScomplete
WHERE SKSkode IN ('DF322', 'DF323', 'DF431', 'DF432', 'DF940', 'DR453')
ORDER BY SKSkode;

Sortering / ORDER BY

Kolonnesortering opnås med ORDER BY kolonnenavn og vil normalt følge den regionale sorteringsorden som defineret i operativsystemet (dvs. for dette program i Windows).

Feltnavne og alias-feltnavne

Feltnavne, der indholder mellemrumstegn eller tegnsætning eller som er identiske med SQL nøgleord, skal altid refereres omgivet af anførselstegn og med tabelreference som i:

SELECT sks."Alder Min." FROM SKScomplete AS sks;

eller

SELECT Recipient, tbl."From" FROM TableName AS tbl;

Hvis udtrukne felter ønskes præsenteret med f.eks. forkortede feltnavne, gives disse et feltnavns-alias i anførselstegn, som ved reference under f.eks. sortering, skal omgives af kantede parenteser, som f.eks.

SELECT MegetLangtBesværligtFeltnavn AS "mlbfn" FROM Sprog ORDER BY [mlbfn];

LEFT JOIN og NULL betingelse

Hvis et udtræk vha. nøgleordet JOIN refererer flere tabeller, hvoraf nogle af felterne kan have ens navne, er det obligat, at disse felter refereres specifikt til hvilken tabel de hentes fra, som f.eks.:

SELECT t1.SKSkode, t1.KodeTekst
FROM Tabel1 AS t1 LEFT JOIN Tabel2 AS t2 ON t1.SKSkode = t2.SKSkode
WHERE t2.SKSkode IS NULL;

hvor dette udtryk kobler (JOIN) to tabeller sammen på indholdet af de (i dette tilfælde) ens benævnte felter SKSkode, hvor feltværdier hentet til venstre for JOIN-udrykket obligat tages med (LEFT JOIN) og tillader at der ikke er matchende værdier i kilden "til højre" (Tabel2), og hvor der slutteligt filtreres (WHERE) til kun at vise de værdier i Tabel1, hvor der netop ikke er match i Tabel2 (WHERE tbl02.SKSkode IS NULL).
Hvis feltet i den ene tabel havde heddet SKSkode og i den anden DiagnoseKode (ON SKSkode = DiagnoseKode), ville det ikke have været nødvendigt med tabel-alias foran feltnavnene, men det må anbefales for overskueligheden!

Tekstfelt betingelser, LOWER og UPPER, LIKE

Betingelser over for strengværdifelter (tekst) kan enten være med lighedstegn (=), der forudsætter eksakt match, hvorfor man overfor tekstfelter ofte vil søge efter hel eller delvis match med nøgleordet LIKE og med jokertegn (%) omkring test-strengen, som f.eks.:
WHERE KodeTekst LIKE '%betændelse%'
eller
WHERE LOWER(KodeTekst) LIKE '%betændelse%'
der også finder ...Betændelse...
hvor LOWER og UPPER kan ad hoc konvertere feltindholdet til store eller små bogstaver for at sikre den ønskede søgning, idet = og LIKE begge er case sensitive.

Datofelt betingelser

Søgning på specifikke datoer gøres over for datoer i ISO tekstformat 'åååå-mm-dd' som i '2014-12-31' og altid med bindestreger uanset aktuelle Windows-opsætning for datoseparator.
Eksempler.:
WHERE DatoSlut > '2014-12-31'
eller
WHERE DatoSlut BETWEEN '2015-01-01' AND '2016-12-31'
hvor BETWEEN inkluderer begge yderværdier.
Nøgleordet CURRENT_DATE bruges af de fleste toneangivende databaser - MS Access bruger dog Date() og MS SQL Server bruger (den for praktiske formål analoge) CAST(GETDATE() AS DATE).

JULIANDAY() og SQLite dato-beregninger

Som noget specielt for SQLite skal datofelter eller datoværdier konverteres til JULIANDAY som i JULIANDAY(DatoFelt), hvis datoværdien behandles aritmetrisk med f.eks. addition eller subtraktion af et antal dage, eller hvis datoen sammenlignes med JULIANDAY dato-referencer, som f.eks.:
WHERE JULIANDAY(DatoSlut) > (JULIANDAY(CURRENT_DATE) - 365 * 2)

Følgende vil således ikke give korrekt resultat:
WHERE DatoSlut > (JULIANDAY(CURRENT_DATE) - 365 * 2)

Mellemlagring i temporære tabeller

Intermediære resultater kan praktisk lagres temporært i RAM i virtuelle TEMPORARY tabeller som f.eks. her i den virtuelle tabel "SKStemp".
For at undgå konflikt med en evt. efterladt virtuel tabel (fra samme programsession) er der tilføjet et DROP TABLE ... før oprettelse af den nye temporære tabel:
DROP TABLE IF EXISTS SKStemp;
CREATE TEMPORARY TABLE IF NOT EXISTS SKStemp AS
SELECT * FROM tabel1 WHERE ...;
som kan hentes frem af et andet (evt. i samme script successivt kørt) udtryk ved
SELECT * FROM SKStemp WHERE ...;

Inaktiverede ("kommentar") linier i SQL-udtrykket

Hvis man under udvikling midlertidigt vil inaktivere en linie i sit SQL-udtryk, kan dette gøres ved at sætte to hosstående bindestreger forrest i linien som i:
SELECT * FROM SKScomplete
WHERE
SKSkode LIKE 'DG4%'
-- OR SKSkode LIKE 'DP90%'
ORDER BY Kat;
der også kan bruges til enkeltliniede kode-kommentarer.

Se også eksempelbeskrivelsen Udtræk: Bruger-SQL eksempel.

__________________________
Online hjælp 10. juni 2026; Copyright © 2017-2026 Niels Knabe