Når du vil hente data fra en database, ber du om dataene ved hjelp av SQL (Structured Query Language). SQL er et datamaskinspråk som ligner mye på engelsk, men som databaseprogrammer forstår. Alle spørringer du kjører, bruker SQL i bakgrunnen.
Forståelse av hvordan SQL fungerer kan hjelpe deg med å opprette bedre spørringer, og kan gjøre det enklere for deg å forstå hvordan du løser en spørring som ikke returnerer resultatene du ønsker.
Dette er én av et sett med artikler om Access SQL. Denne artikkelen beskriver den grunnleggende bruken av SQL til å velge data, og bruker eksempler for å illustrere SQL-syntaks.
I denne artikkelen
- Hva er SQL?
- Grunnleggende SQL-setninger: SELECT, FROM og WHERE
- Sortere resultatene: SORTER ETTER
- Arbeide med summerte data: GROUP BY og HAVING
- Kombinere spørringsresultater: UNION
Hva er SQL?
SQL er et dataspråk for å arbeide med sett med fakta og relasjonene mellom dem. Relasjonsdatabaseprogrammer, for eksempel Microsoft Office Access, bruker SQL til å arbeide med data. I motsetning til mange dataspråk er SQL ikke vanskelig å lese og forstå, selv for en nybegynner. I likhet med mange dataspråk er SQL en internasjonal standard som er anerkjent av standardiseringsorganer som ISO og ANSI.
Du bruker SQL til å beskrive datasett som kan hjelpe deg med å svare på spørsmål. Når du bruker SQL, må du bruke riktig syntaks. Syntaks er et sett med regler der elementene i et språk kombineres på riktig måte. SQL-syntaksen er basert på engelsk syntaks, og bruker mange av de samme elementene som Visual Basic for Applications-syntaksen (VBA).
En enkel SQL-setning som henter en liste over etternavn for kontakter som har Mary i fornavn, kan for eksempel se slik ut:
SELECT Last_Name
FROM Contacts
WHERE First_Name = 'Mary';
Obs!
SQL brukes ikke bare til å manipulere data, men også til å opprette og endre utformingen av databaseobjekter, for eksempel tabeller. Den delen av SQL som brukes til å opprette og endre databaseobjekter, kalles datadefinisjonsspråk (DDL). Dette emnet dekker ikke DDL. Hvis du vil ha mer informasjon, kan du se artikkelen Opprette eller endre tabeller eller indekser ved hjelp av en datadefinisjonsspørring.
SELECT-setninger
Du skriver en SELECT-setning for å beskrive et sett med data ved hjelp av SQL. Et SELECT-uttrykk inneholder en fullstendig beskrivelse av et sett med data som du vil hente fra en database. Dette inkluderer følgende:
- Hvilke tabeller som inneholder dataene.
- Hvordan data fra ulike kilder er relatert.
- Hvilke felt eller beregninger som skal produsere dataene.
- Vilkår som dataene må samsvare med for å inkluderes.
- Om og hvordan resultatene skal sorteres.
SQL-setninger
I likhet med en setning har en SQL-setning setninger. Hver setning utfører en funksjon for SQL-setningen. Noen setninger er obligatoriske i en SELECT-setning. Tabellen nedenfor viser de vanligste SQL-setningene.
| SQL-setning | Hva den gjør | Obligatorisk |
|---|---|---|
| SELECT | Viser feltene som inneholder data av interesse. | Ja |
| FROM | Viser tabellene som inneholder feltene som er oppført i SELECT-setningen. | Ja |
| WHERE | Angir feltvilkår som må oppfylles av hver post for å inkluderes i resultatene. | Nei |
| BESTILL INNEN | Angir hvordan resultatene skal sorteres. | Nei |
| GROUP BY | I et SQL-uttrykk som inneholder mengdefunksjoner, vises felt som ikke er summert i SELECT-setningen. | Bare hvis det finnes slike felt |
| HAVING | I en SQL-setning som inneholder mengdefunksjoner, angir vilkårene som gjelder for felt som er oppsummert i SELECT-setningen. | Nei |
SQL-vilkår
Hver SQL-setning er sammensatt av termer – sammenlignbar med ordklasser. Tabellen nedenfor viser ulike typer SQL-begreper.
| SQL-begrep | Sammenlignbar ordklasse | Definisjon | Eksempel |
|---|---|---|---|
| identifikator | substantiv | Et navn som du bruker til å identifisere et databaseobjekt, for eksempel navnet på et felt. | Kunder. [Telefonnummer] |
| operator | verb eller adverb | Et nøkkelord som representerer en handling eller endrer en handling. | AS |
| konstant | substantiv | En verdi som ikke endres, for eksempel et tall eller NULL. | 42 |
| uttrykk | adjektiv | En kombinasjon av identifikatorer, operatorer, konstanter og funksjoner som evalueres mot en enkelt verdi. | >= Produkter. [Enhetspris] |
Grunnleggende SQL-setninger: SELECT, FROM og WHERE
Et SQL-uttrykk har den generelle formen:
SELECT field_1
FROM table_1
WHERE criterion_1
;
Obs!
- Access ignorerer linjeskift i en SQL-setning. Vurder imidlertid å bruke en linje for hver setning for å forbedre lesbarheten til SQL-setningene dine for deg selv og andre.
- Alle SELECT-setninger slutter med et semikolon (;). Semikolonet kan vises på slutten av den siste setningen eller på en linje for seg selv på slutten av SQL-setningen.
Et eksempel i Access
Følgende illustrerer hvordan en SQL-setning for en enkel utvalgsspørring kan se ut i Access:
1. SELECT-setning
2. Setningsdelen FROM
3. WHERE-setning
Dette SQL-eksemplet lyder «Velg dataene som er lagret i feltene E-postadresse og Firma, fra tabellen Kontakter, nærmere bestemt de postene der verdien for feltet By er Seattle.»
La oss se på eksemplet, én setning om gangen, for å se hvordan SQL-syntaks fungerer.
SELECT-setningen
SELECT [E-mail Address], Company
Dette er SELECT-setningen. Det består av en operator (SELECT) etterfulgt av to identifikatorer ([E-postadresse] og Firma).
Hvis en identifikator inneholder mellomrom eller spesialtegn (for eksempel «E-postadresse»), må den stå i hakeparenteser.
En SELECT-setning trenger ikke å si hvilke tabeller som inneholder feltene, og den kan ikke angi eventuelle betingelser som må oppfylles av dataene som skal inkluderes.
Setningsdelen SELECT vises alltid foran setningsdelen FROM i en SELECT-setning.
Setningsdelen FROM
FROM Contacts
Dette er FROM-setningen. Det består av en operator (FROM) etterfulgt av en identifikator (Kontakter).
En FROM-setning lister ikke opp feltene som skal velges.
WHERE-setningen
WHERE City="Seattle"
Dette er WHERE-setningen. Det består av en operator (HVOR) etterfulgt av et uttrykk (City="Seattle").
Obs!
I motsetning til SELECT- og FROM-setningsdelene, er ikke WHERE-setningsdelen et nødvendig element i en SELECT-setning.
Du kan utføre mange av handlingene som SQL lar deg utføre ved å bruke SELECT-, FROM- og WHERE-setninger. Du finner mer informasjon om hvordan du bruker disse setningene i disse tilleggsartiklene:
Sortere resultatene: SORTER ETTER
Som i Microsoft Excel kan du sortere spørringsresultater i et dataark i Access. Du kan også angi i spørringen hvordan du vil sortere resultatene når spørringen kjøres, ved hjelp av en ORDER BY-setning. Hvis du bruker en ORDER BY-setningsdel, er det den siste setningen i SQL-setningen.
En ORDER BY-setning inneholder en liste over feltene du vil bruke for sortering, i samme rekkefølge som du vil bruke sorteringsoperasjonene.
La oss for eksempel si at du vil at resultatene først skal sorteres etter verdien i feltet Firma i synkende rekkefølge, og – hvis det finnes poster med samme verdi for Firma – sorteres etter verdiene i feltet E-postadresse i stigende rekkefølge. ORDER BY-setningen vil ligne på følgende:
ORDER BY Company DESC, [E-mail Address]
Obs!
Som standard sorteres verdier i stigende rekkefølge (A–Z, minste til største). Bruk i stedet DESC-nøkkelordet til å sortere verdier i synkende rekkefølge.
Hvis du vil ha mer informasjon om ORDER BY-setningen, kan du se emnet ORDER BY-SETNINGEN.
Arbeide med summerte data: GROUP BY og HAVING
Noen ganger vil du arbeide med summerte data, for eksempel det totale salget i løpet av en måned eller de dyreste varene på en lagerbeholdning. Dette gjør du ved å bruke en mengdefunksjon på et felt i SELECT-setningen. Hvis du for eksempel vil at spørringen skal vise antallet e-postadresser som er oppført for hvert firma, kan SELECT-setningen se omtrent slik ut:
SELECT COUNT([E-mail Address]), Company
Mengdefunksjonene du kan bruke, avhenger av hvilken type data som finnes i feltet eller uttrykket du vil bruke. Hvis du vil ha mer informasjon om de tilgjengelige mengdefunksjonene, kan du se artikkelen SQL-mengdefunksjoner.
Angi felt som ikke brukes i en mengdefunksjon: Setningsdelen GROUP BY
Når du bruker mengdefunksjoner, må du vanligvis også opprette en GROUP BY-setning. En GROUP BY-setning viser alle feltene der du ikke bruker en mengdefunksjon. Hvis du bruker mengdefunksjoner på alle feltene i en spørring, trenger du ikke å opprette GROUP BY-setningen.
En GROUP BY-setningsdel kommer umiddelbart etter WHERE-setningsdelen, eller FROM-setningsdelen hvis det ikke finnes noen WHERE-setning. En GROUP BY-setning viser feltene slik de vises i SELECT-setningen.
Hvis du for eksempel fortsetter i forrige eksempel, hvis SELECT-setningsdelen bruker en mengdefunksjon på [E-postadresse], men ikke på Firma, vil GROUP BY-setningsdelen se omtrent slik ut:
GROUP BY Company
Hvis du vil ha mer informasjon om setningsdelen GROUP BY, kan du se emnet GROUP BY-setningsdelen.
Begrense samlede verdier ved hjelp av gruppevilkår: HAVING-setningen
Hvis du vil bruke vilkår til å begrense resultatene, men feltet du vil bruke vilkår for, brukes i en mengdefunksjon, kan du ikke bruke en WHERE-setning. I stedet bruker du en HAVING-setningsdel. En HAVING-setningsdel fungerer som en WHERE-setning, men brukes for aggregerte data.
Anta for eksempel at du bruker GJSN-funksjonen (som beregner en gjennomsnittlig verdi) med det første feltet i SELECT-setningen:
SELECT COUNT([E-mail Address]), Company
Hvis du vil at spørringen skal begrense resultatene basert på verdien i ANTALL-funksjonen, kan du ikke bruke vilkår for dette feltet i WHERE-setningen. I stedet legger du vilkåret i en HAVING-setningsdel. Hvis du for eksempel vil at spørringen bare skal returnere rader hvis det er mer enn én e-postadresse tilknyttet selskapet, kan HAVING-setningsdelen se omtrent slik ut:
HAVING COUNT([E-mail Address])>1
Obs!
En spørring kan ha en WHERE-setning og en HAVING-setning – vilkår for felt som ikke brukes i en mengdefunksjon, plasseres i WHERE-setningsdelen, og vilkår for felt som brukes med mengdefunksjoner går i HAVING-setningsdelen.
Hvis du vil ha mer informasjon om HAVING-setningsdelen, kan du se emnet HAVING-setningsdel.
Kombinere spørringsresultater: UNION
Når du vil se gjennom alle dataene som returneres av flere like utvalgsspørringer, sammen, som et kombinert sett, bruker du UNION-operatoren.
Med operatoren UNION kan du kombinere to SELECT-setninger til én. SELECT-uttrykkene du kombinerer må ha samme antall utdatafelt, i samme rekkefølge og med samme eller kompatible datatyper. Når du kjører spørringen, kombineres data fra hvert sett med tilsvarende felt i ett utdatafelt, slik at spørringsutdataene har samme antall felt som hver av SELECT-setningene.
Obs!
I forbindelse med en unionsspørring er datatypene Tall og Tekst kompatible.
Når du bruker UNION-operatoren, kan du også angi om spørringsresultatene skal inkludere eventuelle dupliserte rader, ved å bruke nøkkelordet ALL.
Den grunnleggende SQL-syntaksen for en unionsspørring som kombinerer to SELECT-setninger, er som følger:
SELECT field_1
FROM table_1
UNION [ALL]
SELECT field_a
FROM table_a
;
Tenk deg for eksempel at du har en tabell med navnet Produkter og en annen tabell med navnet Tjenester. Begge tabellene har felt som inneholder navnet på produktet eller tjenesten, prisen, garantien eller garantitilgjengeligheten, og om du tilbyr produktet eller tjenesten utelukkende. Selv om Produkter-tabellen lagrer garantiinformasjon, og Service-tabellen lagrer garantiinformasjon, er den grunnleggende informasjonen den samme (om et bestemt produkt eller en bestemt tjeneste gir et løfte om kvalitet). Du kan bruke en unionsspørring, som følgende, til å kombinere de fire feltene fra de to tabellene:
SELECT name, price, warranty_available, exclusive_offer
FROM Products
UNION ALL
SELECT name, price, guarantee_available, exclusive_offer
FROM Services
;
Hvis du vil ha mer informasjon om hvordan du kombinerer SELECT-uttrykk ved hjelp av UNION-operatoren, kan du se Kombinere resultatene av flere utvalgsspørringer ved hjelp av en unionsspørring.