Når du vil hente data fra en database, ber du om dataene ved hjelp av Structured Query Language eller SQL. SQL er et datamaskinspråk som ligner på engelsk, men som databaseprogrammer forstår. Hver spørring du kjører, bruker SQL i bakgrunnen.
Å forstå hvordan SQL fungerer kan hjelpe deg med å opprette bedre spørringer, og det 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 grunnleggende bruk av SQL til å velge data, og bruker eksempler til å illustrere SQL-syntaks.
I denne artikkelen
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 datamaskinspråk er ikke SQL vanskelig å lese og forstå, selv for en nybegynner. I likhet med mange dataspråk er SQL en internasjonal standard som er anerkjent av standardorganer 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 settet med regler der elementene i et språk kombineres riktig. SQL-syntaks er basert på engelsk syntaks, og bruker mange av de samme elementene som Visual Basic for Applications (VBA)-syntaks.
For eksempel en enkel SQL-setning som henter en liste over etternavn for kontakter der fornavnet er Mary, kan ligne på dette:
SELECT Last_Name
FROM Contacts WHERE First_Name = 'Mary';
Obs!: SQL brukes ikke bare til å manipulere data, men også for å opprette og endre utformingen av databaseobjekter, for eksempel tabeller. 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
Hvis du vil beskrive et sett med data ved hjelp av SQL, skriver du en SELECT-setning. En SELECT-setning inneholder en fullstendig beskrivelse av et sett med data som du vil hente fra en database. Dette inkluderer følgende:
-
Hvilke tabeller 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 du sorterer resultatene.
SQL-setninger
Som en setning har en SQL-setning setninger. Hver setning utfører en funksjon for SQL-setningen. Noen setninger kreves i en SELECT-setning. Tabellen nedenfor viser de vanligste SQL-setningene.
SQL-setning |
Dette gjør den |
Obligatorisk |
SELECT |
Lister feltene som inneholder interessante data. |
Ja |
FROM |
Lister tabellene som inneholder feltene som er oppført i SELECT-setningsdelen. |
Ja |
WHERE |
Angir feltvilkår som må oppfylles av hver post som skal inkluderes i resultatene. |
Nei |
BESTILL ETTER |
Angir hvordan resultatene skal sorteres. |
Nei |
GROUP BY |
I en SQL-setning som inneholder mengdefunksjoner, vises felt som ikke er oppsummert i SELECT-setningen. |
Bare hvis det finnes slike felt |
HAVING |
I en SQL-setning som inneholder mengdefunksjoner, angir du betingelser som gjelder for felt som summeres i SELECT-setningen. |
Nei |
SQL-termer
Hver SQL-setning består av termer – som kan sammenlignes med ordklasser. Tabellen nedenfor viser typer SQL-termer.
SQL-term |
Sammenlignbar del av tale |
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 til én enkelt verdi. |
>= Produkter. [Enhetspris] |
Grunnleggende SQL-setninger: SELECT, FROM og WHERE
En SQL-setning tar 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 for deg selv og andre.
-
Hver SELECT-setning slutter med et semikolon (;). Semikolonet kan vises på slutten av den siste setningen eller på en linje alene 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-setningsdel
2. FROM-setningsdel
3. WHERE-setningsdel
I dette eksemplet leser SQL-setningen «Velg dataene som er lagret i feltene kalt E-postadresse og Firma fra tabellen Kontakter, spesielt 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-setningsdelen
SELECT [E-mail Address], Company
Dette er SELECT-setningsdelen. Den 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-setningsdel trenger ikke å si hvilke tabeller som inneholder feltene, og den kan ikke angi betingelser som må oppfylles av dataene som skal inkluderes.
SELECT-setningsdelen vises alltid foran FROM-setningsdelen i en SELECT-setning.
FROM-setningsdelen
FROM Contacts
Dette er FROM-setningsdelen. Den består av en operator (FROM) etterfulgt av en identifikator (Kontakter).
En FROM-setning viser ikke feltene som skal velges.
WHERE-setningsdelen
WHERE City="Seattle"
Dette er WHERE-setningsdelen. Den består av en operator (WHERE) etterfulgt av et uttrykk (City="Seattle").
Obs!: I motsetning til SELECT- og FROM-setningene er ikke WHERE-setningsdelen et nødvendig element i en SELECT-setning.
Du kan utføre mange av handlingene som SQL gjør at du kan gjøre ved hjelp av SELECT-, FROM- og WHERE-setninger. Du finner mer informasjon om hvordan du bruker disse setningene i disse tilleggsartiklene:
Sortere resultatene: SORTER ETTER
I likhet med 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-setningsdel inneholder en liste over feltene du vil bruke for sortering, i samme rekkefølge som du vil bruke sorteringsoperasjonene.
Anta for eksempel 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 firmaet – sortert etter verdiene i feltets e-postadresse i stigende rekkefølge. ORDER BY-setningsdelen vil ligne på følgende:
ORDER BY Company DESC, [E-mail Address]
Obs!: Som standard sorteres verdiene i stigende rekkefølge (A–Å, minst til størst). Bruk NØKKELSC-nøkkelordet til å sortere verdier i synkende rekkefølge i stedet.
Hvis du vil ha mer informasjon om ORDER BY-setningsdelen, kan du se emnet ORDER BY Clause.
Arbeid med summerte data: GROUP BY og HAVING
Noen ganger vil du arbeide med summerte data, for eksempel totalt salg i en måned, eller de dyreste varene i en beholdning. Dette gjør du ved å bruke en mengdefunksjon på et felt i SELECT-setningsdelen. Hvis du for eksempel vil at spørringen skal vise antallet e-postadresser som er oppført for hvert selskap, kan SELECT-setningen se omtrent slik ut:
SELECT COUNT([E-mail Address]), Company
Mengdefunksjonene du kan bruke, avhenger av hvilken type data som er i feltet eller uttrykket du vil bruke. Hvis du vil ha mer informasjon om de tilgjengelige mengdefunksjonene, kan du se artikkelen SQL Aggregate Functions.
Angi felt som ikke brukes i en mengdefunksjon: GROUP BY-setningsdelen
Når du bruker mengdefunksjoner, må du vanligvis også opprette en GROUP BY-setningsdel. En GROUP BY-setningsdel viser alle feltene som du ikke bruker en mengdefunksjon på. Hvis du bruker mengdefunksjoner på alle feltene i en spørring, trenger du ikke å opprette GROUP BY-setningsdelen.
En GROUP BY-setningsdel følger umiddelbart WHERE-setningsdelen eller FROM-setningsdelen hvis det ikke finnes noen WHERE-setning. En GROUP BY-setningsdel viser feltene slik de vises i SELECT-setningsdelen.
Hvis du for eksempel fortsetter det forrige eksemplet, hvis SELECT-setningsdelen bruker en mengdefunksjon på [E-postadresse], men ikke for selskapet, vil GROUP BY-setningsdelen se omtrent slik ut:
GROUP BY Company
Hvis du vil ha mer informasjon om GROUP BY-setningsdelen, kan du se emnet GROUP BY Clause.
Begrense mengdeverdier ved hjelp av gruppevilkår: HAVING-setningsdelen
Hvis du vil bruke vilkår til å begrense resultatene, men feltet du vil bruke vilkår på, brukes i en mengdefunksjon, kan du ikke bruke en WHERE-setning. I stedet bruker du en HAVING-setningsdel. En HAVING-setning fungerer som en WHERE-setningsdel, men brukes for aggregerte data.
Anta for eksempel at du bruker GJENNOMSNITT-funksjonen (som beregner en gjennomsnittsverdi) 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 til denne ANTALL-funksjonen, kan du ikke bruke et vilkår for dette feltet i WHERE-setningsdelen. I stedet legger du vilkårene i en HAVING-setningsdel. Hvis du for eksempel bare vil at spørringen skal returnere rader hvis det er mer enn én e-postadresse som er knyttet til firmaet, kan HAVING-setningsdelen se omtrent slik ut:
HAVING COUNT([E-mail Address])>1
Obs!: En spørring kan ha en WHERE-setningsdel og en HAVING-setning – vilkår for felt som ikke brukes i en mengdefunksjon, går 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-setning.
Kombinerer spørringsresultater: UNION
Når du vil se gjennom alle dataene som returneres av flere lignende utvalgsspørringer sammen, bruker du UNION-operatoren som et kombinert sett.
Union-operatoren lar deg kombinere to SELECT-setninger i én. SELECT-setningene du kombinerer, må ha samme antall utdatafelt, i samme rekkefølge og med de samme eller kompatible datatypene. 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 hvert av utvalgssetningene.
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 inneholde dupliserte rader, hvis det finnes noen, ved hjelp av ALL-nøkkelordet.
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 ;
Anta for eksempel at du har en tabell kalt Produkter og en annen tabell kalt 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 tjenestetabellen lagrer garantiinformasjon, er den grunnleggende informasjonen den samme (enten et bestemt produkt eller en bestemt tjeneste inneholder et løfte om kvalitet). Du kan bruke en unionsspørring, for eksempel 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-setninger ved hjelp av UNION-operatoren, kan du se Kombinere resultatene av flere utvalgsspørringer ved hjelp av en unionsspørring.