Når du vil hente data fra en database, skal bede du om dataene ved hjælp af Structured Query Language eller SQL. SQL er et computersprog, der ligner engelsk, men som databaseprogrammer forstår. Alle de forespørgsler, du kører, bruger SQL i baggrunden.
Hvis du forstår, hvordan SQL fungerer, kan det hjælpe dig med at oprette bedre forespørgsler, og det kan gøre det nemmere for dig at forstå, hvordan du reparerer en forespørgsel, der ikke returnerer de ønskede resultater.
Dette er én artikel i en række om Access SQL. I denne artikel beskrives den grundlæggende brug af SQL til at vælge data, og der anvendes eksempler til at illustrere SQL-syntaks.
I denne artikel
Hvad er SQL?
SQL er et computersprog til at arbejde med faktasæt og relationerne mellem dem. Relationsdatabaseprogrammer, f.eks. Microsoft Office Access, bruger SQL til at arbejde med data. I modsætning til mange computersprog er SQL ikke svært at læse og forstå, selv for en nybegynder. Sql er ligesom mange andre computersprog en international standard, der anerkendes af standardiseringsorganer som ISO og ANSI.
SQL bruges til at beskrive datasæt, der kan hjælpe dig med at besvare spørgsmål. Når du bruger SQL, skal du bruge den korrekte syntaks. Syntaksen er regelsættet for, hvordan elementerne i et sprog kombineres korrekt. SQL-syntaks er baseret på engelsk syntaks og anvender mange af de samme elementer som syntaksen for Visual Basic for Applications (VBA).
En enkel SQL-sætning, der henter en liste over efternavne på kontakter, hvis fornavn er Mary kan f.eks. så således ud:
SELECT Last_Name
FROM Contacts WHERE First_Name = 'Mary';
Bemærk!: SQL bruges ikke kun til at manipulere data, men også til at oprette og ændre designet af databaseobjekter, f.eks. tabeller. Den del af SQL, der bruges til at oprette og ændre databaseobjekter, kaldes DDL (Data Definition Language). Dette emne dækker ikke DDL. Du kan finde flere oplysninger i artiklen Opret eller rediger tabeller eller indekser ved hjælp af en datadefinitionsforespørgsel.
SELECT-sætninger
Du kan skrive en SELECT-sætning for at beskrive et sæt data ved hjælp af SQL. En SELECT-sætning indeholder en fuldstændig beskrivelse af et sæt data, du vil hente fra en database. Dette omfatter følgende:
-
Hvilke tabeller, der indeholder dataene.
-
Hvordan data fra forskellige kilder er relaterede.
-
Hvilke felter eller beregninger, der vil returnere dataene.
-
Kriterier, som dataene skal matche for at blive medtaget.
-
Hvorvidt og hvordan resultaterne sorteres.
SQL-delsætninger
Ligesom en almindelig sætning har en SQL-sætning delsætninger. Hver delsætning udfører en funktion for SQL-sætningen. Nogle delsætninger er påkrævede i en SELECT-sætning. I den følgende tabel vises de mest almindelige SQL-delsætninger.
SQL-delsætning |
Hvad gør den |
Påkrævet |
SELECT |
Viser de felter, der indeholder data, som kan have interesse. |
Ja |
FROM |
Viser de tabeller, der indeholder de felter, som er angivet i SELECT-delsætningen. |
Ja |
WHERE |
Angiver de feltkriterier, der skal opfyldes af hver post for at blive inkluderet i resultaterne. |
Nej |
ORDER BY |
Angiver, hvordan resultaterne sorteres. |
Nej |
GROUP BY |
I en SQL-sætning, der indeholder aggregeringsfunktioner, vises felter, som ikke er opsummeret i SELECT-delsætningen. |
Kun hvis der findes sådanne felter |
HAVING |
I en SQL-sætning, der indeholder aggregeringsfunktioner, angives betingelser, der gælder for felter, som er opsummeret i SELECT-sætningen. |
Nej |
SQL-termer
Hver enkelt SQL-sætning består af termer – som kan sammenlignes med ordklasser. Følgende tabel opstiller typer af SQL-termer.
SQL-term |
Kan sammenlignes med ordklassen |
Definition |
Eksempel |
id |
substantiv |
Et navn, du bruger til at identificere et databaseobjekt, f.eks. navnet på et felt. |
Customers.[Telefonnummer] |
operator |
verbum eller adverbium |
Et nøgleord, der repræsenterer en handling eller ændrer en handling. |
AS |
konstant |
substantiv |
En værdi, der ikke ændrer sig, f.eks. et tal eller NULL. |
42 |
udtryk |
adjektiv |
En kombination af id'er, operatorer, konstanter og funktioner, der evalueres til en enkelt værdi. |
>= Products.[Unit Price] |
Grundlæggende SQL-delsætninger: SELECT, FROM og WHERE
En SQL-sætning tager den generelle form:
SELECT field_1
FROM table_1 WHERE criterion_1 ;
Bemærkninger!:
-
Access ignorerer linjeskift i en SQL-sætning. Du bør dog overveje at bruge en linje til hver delsætning for at forbedre læsbarheden af dine SQL-sætninger for din egen og andres skyld.
-
Hver SELECT-sætning slutter med et semikolon (;). Semikolonet vises enten i slutningen af den sidste delsætning eller på en selvstændig linje sidst i SQL-sætningen.
Et eksempel i Access
Følgende illustrerer, hvordan en SQL-sætning for en simpel udvælgelsesforespørgsel kunne se ud i Access:
1. SELECT-delsætning
2. FROM-delsætning
3. WHERE-delsætning
I dette eksempel på en SQL-sætning står der "Vælg de data, der er gemt i de felter, der hedder E-mail Address og Company, fra den tabel, der hedder Contacts, særligt de poster, hvor værdien af feltet City er Seattle".
Lad os se på eksemplet én delsætning ad gangen for at se, hvordan SQL-syntaks fungerer.
SELECT-delsætningen
SELECT [E-mail Address], Company
Dette er SELECT-delsætningen. Den består af en operator (SELECT) efterfulgt af to identifikatorer ([E-mail Address] og Company).
Hvis et id indeholder mellemrum eller specialtegn (f.eks. "E-mail Address"), skal de omsluttes af kantede parenteser.
Der behøver ikke at stå i SELECT-delsætningen, hvilke tabeller der indeholder felterne, og den kan ikke angive nogen betingelser, der skal være opfyldt af de data, der skal medtages.
SELECT-delsætningen vises altid foran FROM-delsætningen i en SELECT-sætning.
FROM-delsætningen
FROM Contacts
Dette er FROM-delsætningen. Den består af en operator (FROM) efterfulgt af et id (Contacts).
En FROM-delsætning viser ikke de felter, der skal vælges.
WHERE-delsætningen
WHERE City="Seattle"
Dette er WHERE-delsætningen. Den består af en operator (WHERE) efterfulgt af et udtryk (City="Seattle").
Bemærk!: I modsætning til SELECT- og FROM-delsætninger er WHERE-delsætningen ikke et påkrævet element i en SELECT-sætning.
Du kan udføre mange af de handlinger, som SQL giver mulighed for, ved hjælp af SELECT-, FROM- og WHERE-delsætninger. Du kan få mere at vide om, hvordan du bruger disse delsætninger, i disse artikler:
Sortering af resultaterne: ORDER BY
Ligesom i Microsoft Excel kan du i Access sortere forespørgselsresultater i et dataark. Du kan også angive i forespørgslen, hvordan du vil sortere resultaterne, når forespørgslen kører, ved hjælp af ORDER BY-delsætningen. Hvis du bruger en ORDER BY-delsætning, er det den sidste delsætning i SQL-sætningen.
En ORDER BY-delsætning indeholder en liste over de felter, du vil bruge til sortering, i samme rækkefølge, som du vil anvende sorteringshandlingerne.
Antag f.eks., at du først vil have dine resultater sorteret efter værdien i feltet Company i faldende rækkefølge, og – hvis der er poster med samme værdi for Company – dernæst sorteret efter værdierne i feltet E-mail Address i stigende rækkefølge. Så ville din ORDER BY-delsætning ligne denne:
ORDER BY Company DESC, [E-mail Address]
Bemærk!: Som standard sorterer Access værdierne i stigende rækkefølge (A-Å, mindste til største). Brug nøgleordet DESC for at sortere værdierne i faldende rækkefølge i stedet.
Hvis du vil have mere at vide om ORDER BY-delsætningen, skal du se emnet ORDER BY-delsætningen.
Arbejd med opsummerede data: GROUP BY og HAVING
Nogle gange vil du arbejde med opsummerede data, f.eks. det samlede salg i en måned eller de dyreste varer på et lager. For at gøre dette skal du anvende en samlefunktion på et felt i din SELECT-delsætning. Hvis du f.eks. vil have forespørgslen til at vise antallet af mailadresser, der er angivet for hvert firma, kan din SELECT-delsætning se således ud:
SELECT COUNT([E-mail Address]), Company
De aggregeringsfunktioner, du kan bruge, afhænger af typen data, der findes i det felt eller udtryk, du vil bruge. Hvis du vil have mere at vide om de tilgængelige aggregeringsfunktioner, skal du se artiklen SQL-aggregeringsfunktioner.
Sådan angiver du felter, der ikke bruges i en aggregeringsfunktion: GROUP BY-delsætningen
Når du bruger aggregeringsfunktioner, skal du som regel også oprette en GROUP BY-delsætning. En GROUP BY-delsætning viser alle de felter, som du ikke anvender en aggregeringsfunktion på. Hvis du anvender aggregeringsfunktioner på alle felterne i en forespørgsel, behøver du ikke at oprette GROUP BY-delsætningen.
En GROUP BY-delsætning følger umiddelbart efter WHERE-delsætningen eller FROM-delsætningen, hvis der ikke er nogen WHERE-delsætning. En GROUP BY-delsætning opstiller felterne, sådan som de vises i SELECT-delsætningen.
Hvis vi f.eks. fortsætter det forrige eksempel, og din SELECT-delsætning anvender en aggregeringsfunktion på [E-mail Address], men ikke på Company, vil din GROUP BY-delsætning se sådan ud:
GROUP BY Company
Hvis du vil have mere at vide om GROUP BY-delsætningen, skal du se emnet GROUP BY-delsætningen.
Begræns aggregeringsværdierne ved hjælp af gruppekriterier: HAVING-delsætningen
Hvis du vil bruge kriterier til at begrænse søgeresultaterne, men det felt, du vil anvende kriterier på, bruges i en aggregeringsfunktion, kan du ikke bruge en WHERE-delsætning. I stedet skal du bruge en HAVING-delsætning. HAVING-delsætningen fungerer som en WHERE-delsætning, men den bruges til aggregerede data.
Antag f.eks., at du bruger funktionen GNS (der beregner en gennemsnitsværdi) med det første felt i din SELECT-delsætning:
SELECT COUNT([E-mail Address]), Company
Hvis du vil have forespørgslen til at begrænse resultaterne baseret på værdien af den pågældende TÆL-funktion, kan du ikke bruge et kriterium for det pågældende felt i WHERE-delsætningen. I stedet skal du placere kriterierne i en HAVING-delsætning. Hvis du f.eks. kun vil have forespørgslen til at returnere rækker, hvis der er mere end én mailadresse knyttet til virksomheden, kan HAVING-delsætningen se således ud:
HAVING COUNT([E-mail Address])>1
Bemærk!: En forespørgsel kan have en WHERE-delsætning og en HAVING-delsætning – kriterier for felter, der ikke bruges i en aggregeringsfunktion, hører til i WHERE-delsætningen, og kriterier for felter, der bruges af aggregeringsfunktioner, hører til i HAVING-delsætningen.
Hvis du vil have mere at vide om HAVING-delsætningen, skal du se emnet HAVING-delsætningen.
Kombinering af forespørgselsresultater: UNION
Når du vil gennemse alle de data, der returneres af flere lignende udvælgelsesforespørgsler, samlet som et enkelt sæt, skal du bruge UNION-operatoren.
Med UNION-operatoren kan du kombinere to SELECT-sætninger i én. De SELECT-sætninger, du kombinerer, skal have det samme antal felter, de skal være i samme rækkefølge, og datatypen skal være den samme eller kompatibel. Når du kører forespørgslen, samles data fra de enkelte sæt tilsvarende felter i ét outputfelt, så forespørgslens output har samme antal felter som hver af SELECT-sætningerne.
Bemærk!: I forbindelse med en foreningsforespørgsel er datatyperne Tal og Tekst kompatible.
Når du bruger UNION-operatoren, kan du også angive, om forespørgselsresultaterne skal medtage dublerede rækker, hvis der findes nogen, ved hjælp af nøgleordet ALL.
Den grundlæggende SQL-syntaks for en foreningsforespørgsel (UNION), der kombinerer to SELECT-sætninger, er som følger:
SELECT field_1
FROM table_1 UNION [ALL] SELECT field_a FROM table_a ;
Antag f.eks., at du har en tabel med navnet Produkter og en anden tabel med navnet Tjenester. Begge tabeller indeholder felter, der indeholder navnet på produktet eller tjenesten, prisen, garantien eller garantiens tilgængelighed, og om du kun tilbyder produktet eller tjenesten. Selvom tabellen Produkter gemmer garantioplysninger, og tabellen Tjenester gemmer garantioplysninger, er de grundlæggende oplysninger de samme (uanset om et bestemt produkt eller en bestemt tjeneste indeholder et løfte om kvalitet). Du kan bruge en foreningsforespørgsel, f.eks. følgende, til at kombinere de fire felter fra de to tabeller:
SELECT name, price, warranty_available, exclusive_offer
FROM Products UNION ALL SELECT name, price, guarantee_available, exclusive_offer FROM Services ;
Du kan få mere at vide om, hvordan du kan kombinere SELECT-sætninger ved hjælp af UNION-operatoren i Kombiner resultaterne af flere udvælgelsesforespørgsler ved hjælp af en foreningsforespørgsel.