Forespørgselsdesign
Forespørgselsdesignvisning giver dig mulighed for at oprette og redigere en databaseforespørgsel.
De fleste databaser bruger forespørgsler til at filtrere eller sortere databasetabellerne, når data skal vises. Visninger (views) tilbyder den samme funktionalitet som forespørgsler, men på serverens side. Hvis din database er på en server, som understøtter visninger, kan du bruge visninger til at filtrere dataposterne på serveren. Det vil normalt forbedre svartiden.
Ved at vælge Opret visning fra fanenTabeller i et database dokument, ser du vinduet Designvisning som gør det samme som vinduet Forespørgselsdesign som beskrives her.
Vinduet Forespørgselsdesign layout bliver gemt med en oprettet forespørgsel, men kan ikke lagres med en oprettet visning.
Designvisningen
For at oprette en forespørgsel klikker du på ikonet Forespørgsler i et databasedokument, og dernæst på Opret forespørgsel i designvisning.
I den nederste rude af Designvisningen kan du definere forespørgslen. For at definere en forespørgsel, angiv databasens feltnavne, som skal indeholdes, samt kriterier til visning af felterne. For at omarrangere kolonnerne i den nederste rude af Designvisningen trækker du en kolonneoverskrift til en ny placering, eller markerer kolonnen og trykker på ÆbleCtrl+piletast.
Øverst i forespørgslens Designvisningsvindue, vises ikonerne for værktøjslinjerne Forespørgselsdesign og Design.
Hvis du vil teste en forespørgsel, dobbeltklikker du på forespørgslens navn i databasedokumentet. Forespørgslens resultat vises i en tabel, der ligner datakildevisningen. Bemærk: Den viste tabel er kun midlertidig.
Taster i forespørgselsdesignvisning
Nøgle |
Funktion |
F4 |
Forhåndsvisning |
F5 |
Udfør forespørgsel |
F7 |
Tilføj tabel eller forespørgsel |
Gennemse
Når du åbner forespørgselsdesignet for første gang, ser du en dialogboks, hvor du først skal vælge den tabel eller forespørgsel, som vil danne grundlag for din nye forespørgsel.
Tilføj felter til forespørgslen ved at dobbeltklikke på dem. Træk og slip for at angive relationer.
Mens du designer en forespørgsel, kan du ikke modificere de valgte tabeller.
Fjerne tabeller
For at fjerne tabellen fra designvisning, klik på den øverste kant af tabelvinduet og vis genvejsmenuen. Du kan bruge kommandoen Slet for at fjerne tabellen fra designvisningen. En anden mulighed er at trykke på Delete-tasten.
Flytte tabel og rette tabellens størrelse
Du kan ændre størrelsen og arrangere tabellerne efter hvad du selv synes. For at flytte tabeller, træk den øverste kant til den ønskede position. Forstør eller formindsk størrelsen tabellen vises i ved at placering markøren på en kant eller et hjørne og trækker tabellen indtil den har den ønskede størrelse.
Tabelrelationer
Hvis der er datarelationer mellem et feltnavn i en tabel og et feltnavn i en anden tabel, kan du bruge disse relationer til din forespørgsel.
Hvis, for eksempel, du har et regneark til artikler identificeret ved artikelnumre, og et regneark til kunder hvor du noterer alle artikler som en kunde bestiller ved bruge de tilsvarende artikelnumre, så er der et forhold mellem de to "artikelnummer" datafelter. Hvis du nu ønsker at oprette en forespørgsel som returnerer alle artikler som en kunde har bestilt, skal du hente data fra to regneark. For at gøre dette, skal du fortælle LibreOffice hvilken sammenhæng der eksisterer mellem data i de to regneark.
For at gøre dette, klikker du på et feltnavn i en tabel (for eksempel, feltnavnet "Elementnummer" fra Kundetabellen), hold museknappen nede og træk så feltnavnet over i feltnavnet i den anden tabel ("Elementnummer" fra Elementtabellen). Når du slipper museknappen, vil en linje forbinde de to felter i de to vinduer. Den tilsvarende betingelse at indholdet af de to feltnavne skal være identiske indtastes i den resulterende SQL-forespørgsel.
Oprettelsen af en forespørgsel som er baseret på flere relaterede ark er kun mulig hvis du bruger LibreOffice som grænsefladen til en relationsdatabase.
Du kan ikke få adgang til tabeller fra forskellige databaser i en forespørgsel. Forespørgsler som involverer flere tabeller kan kun være oprettet indenfor en database.
Angive kædetype
Hvis du dobbeltklikker på linjen der forbinder to linkede felter eller benytter menukommandoen Indsæt - Ny relation, kan du angive typen af kæde i dialogen Relationer.
Alternativt kan du trykke tabulator, indtil linjen er valgt, trykke Skift+F10 for at vise genvejsmenuen og der vælge kommandoen Rediger der. Visse databaser understøtter kun en del af de mulige typer af join.
Slette relationer
For at slette en relation mellem to tabeller, klik på forbindelseslinjen og tryk derefter på Delete-tasten.
Alternativt, slet de tilsvarende punkter i Involverede felter i dialogen Relationer. Eller tryk på tabulatortasten indtil den forbindende vektor bliver vist fremhævet, tryk så Skift+F10 for at åbne genvejsmenuen og vælg kommandoen Slet.
Definere en forespørgsel
Marker betingelser for at angive forespørgslen. Hver kolonne i designtabellen accepterer et datafelt for forespørgslen. Betingelserne i en række er kædet med et logisk AND.
Angive feltnavn
Først markerer du alle feltnavne fra de tabeller, som du vil tilføje til forespørgslen. Du kan gør dette enten ved at trække og slippe eller ved at dobbeltklikke på et feltnavn i tabelvinduet. Med træk-og-slip metoden bruger du musen til at trække et feltnavn fra tabelvinduet ind i det nederste område for forespørgselsdesignet. Mens du gør dette, kan du bestemme hvilken kolonne du vil tilføje feltet til. Vælg et feltnavn ved at dobbeltklikke. Det vil så blive tilføjede til næste ledige kolonne.
Slette feltnavne
For at fjerne et feltnavn fra forespørgslen, klikker du på kolonneoverskriften for feltet og vælger kommandoen Slet på genvejsmenuen for kolonnen.
Gemme forespørgsel
Brug ikonet Gem på Standardværktøjslinjen for at gemme forespørgslen. Der kommer en dialog som beder dig indtaste et navn for forespørgslen. Hvis databasen understøtter skemaer, kan du også indtaste et skema.
Skema
Indtast navnet på det skema der er tildelt til forespørgslen eller tabelvisningen.
Forespørgselsnavn eller tabelvisningsnavn
Indtast navnet på forespørgslen eller tabelvisningen.
Filtrere data
For at filtrere data for forespørgslen sætter du de ønskede parametre i det nederste område af designvisningen. De følgende linjer er tilgængelige:
Felt
Indtast navnet på datafeltet som du refererede til i forespørgslen. Alle indstillinger i de nederste rækker henviser til dette felt. Hvis du aktiverer en celle med et museklik vil du se en pileknap, som lader dig vælge et felt. "Tabelnavn.*"-indstillingen markerer alle datafelter og kriteriet gælder for alle tabelfelter.
Alias
Angiver et alias. Dette alias vil være listet i en forespørgsel i stedet for feltets navn. Dette gør det muligt at anvende brugerdefinerede kolonneetiketter. For eksempel, hvis datafeltet har navnet VrNr, og du hellere vil have, at Varenummer vises i forespørgslen, indtaster du Varenummer som alias.
I en SQL-sætning defineres aliaser som følger:
SELECT kolonne AS alias FROM tabel.
For eksempel:
SELECT "VrNr" AS "Varenummer" FROM "dele"
Tabel
Den tilsvarende databasetabel for det valgte datafelt er opremset her. Hvis du aktiverer en celle med et museklik, vises en pil, som lader dig vælge en anden tabel fra den aktuelle forespørgsel.
Sortere
Hvis du klikker på cellen, kan du vælge indstillinger for sortering: stigende, faldende og ikke sorteret. Tekstfelter bliver sorteret alfabetisk og numeriske felter numerisk. For de fleste databaser kan administratorer indstille sorteringen.
Synlig
Hvis du markerer egenskaben Synlig for et datafelt, bliver feltet synligt i forespørgslen. Hvis du kun bruger et datafelt til at formulerer en betingelse, har du ikke nødvendigvis har brug for at det vises.
Kriterier
Specificerer de Kriterier efter hvilke indholdet i datafeltet bliver filtreret.
eller
Her kan du indtaste endnu et kriterium til filtrering i hver linje. Flere kriterier i en kolonne vil være forbundet med en OR kæde.
Du kan også bruge genvejsmenuen for gitterlinjer i det nederste område af forespørgselsdesignet til at indsætte en anden linje for funktioner:
Funktioner
Funktionerne du kan køre her afhænger af databasen.
Hvis du arbejder med HSQL-databasen, vil rullelisten i rækken Funktion give dig mulighed for at vælge følgende indstillinger:
Indstilling |
SQL |
Effekt |
Ingen funktion |
Ingen funktion vil blive udført. |
|
Middel |
AVG |
Beregner den aritmetiske middelværdi af et felt. |
Tæl |
COUNT |
Bestemmer antallet af dataposter i tabellen. Tomme felter kan enten være talte (A) eller ikke (B). A) COUNT(*): Overføres en stjerne som argument tæller alle dataposter i tabellen. B) COUNT(kolonne): Overføres et feltnavn som argument tæller kun felter hvori feltnavnet i spørgsmålet indeholder en værdi. Null værdier (tomme felter) vil ikke være medtalt. |
Maksimum |
MAX |
Bestemmer den højeste værdi af et felt. |
Minimum |
MIN |
Bestemmer den laveste værdi af et felt. |
Sum |
SUM |
Beregner summen af værdier i de tilknyttede felter. |
Gruppe |
GROUP BY |
Grupperer forespørgselsdata efter det valgte feltnavn. Funktioner bliver udført i henhold til den angivne gruppe. I SQL svarer denne indstilling til GROUP BY sætningen. Hvis et kriterium bliver tilføjet, vises dette element i SQL HAVING. |
Du kan også indtaste funktionskald direkte i SQL-sætningen. Syntaksen er:
SELECT FUNCTION(kolonne) FROM tabel.
For eksempel, funktionskaldet i SQL til at beregne en sum er:
SELECT SUM("Pris") FROM "Artikel".
Bortset fra Gruppe-funktionen, er de ovennævnte funktioner såkaldte sammensatte funktioner. Disse er funktioner der beregner data for at oprette sammenfatninger ud fra resultaterne. Yderligere funktioner som ikke er på rullelisten er også mulige. Disse afhænger af den specifikke databasesystem der anvendes. For at få information omkring driverspecifikke funktioner henvises til dokumentationen for dit databasesystem.
For at benytte andre funktioner der ikke er i rullelisten, skal du indtaste dem under Felt.
Du kan også tildele aliaser til funktionskald. Hvis forespørgslen ikke skal vises i kolonneoverskriften, indtaster du det ønskede navn under Alias.
Den tilsvarende funktion i en SQL-sætning er:
SELECT FUNCTION() AS aliasnavn FROM tabel
Eksempel:
SELECT COUNT(*) AS Antal FROM "Element"
Hvis du kører denne funktion, kan du ikke indsætte yderligere kolonner for forespørgslen medmindre du modtager disse kolonner som en "Gruppe" funktion.
Eksempler
I det følgende eksempel, køres en forespørgsel gennem to tabeller: en "Element" tabel med feltet "Vare_Nr" og en "Leverandør" tabel med feltet "Leverandør_Navn". Begge tabeller har et fælles feltnavn "Leverandør_Nr."
Det følgende trin er nødvendigt for at oprette en forespørgsel der indeholder alle leverandører der leverer mere end tre elementer.
-
Indsæt "Element" og "Leverandør" tabellerne i forespørgselsdesignet.
-
Sammenkæd feltet "Leverandør_Nr" i de to tabeller hvis der ikke allerede er en relation af denne type.
-
Dobbeltklik på "Vare_Nr" feltet fra tabellen "Element". Vis linjen Funktion ved at bruge genvejsmenuen og vælg funktionen Tæl.
-
Indtast >3 som et kriterium og deaktiver det synlige felt.
-
Dobbeltklik på feltet "Leverandør_Navn" i tabellen "Leverandør" og vælge funktionen Gruppe.
-
Kør forespørgslen.
Hvis felterne "Pris" (den individuelle pris på en artikel) og "Leverandør_Nr" (leverandøren af denne artikel) findes i tabellen "Element", kan du få gennemsnitsprisen på et element som en leverandør giver med følgende forespørgsel:
-
Indsæt tabellen "Element" i forespørgselsdesignet.
-
Dobbeltklik på felterne "Pris" og "Leverandør_Nr".
-
Aktiver linjen Funktion og marker Middelfunktionen fra feltet "Pris".
-
Du kan også indtaste "Middel" i linjen til aliasnavnet (uden anførselstegn).
-
Vælg Gruppering for feltet "Leverandør_Nr".
-
Kør forespørgslen.
De følgende menukommandoer og symboler er tilgængelige i en genvejsmenu:
Funktioner
Viser eller skjuler en række for valg af funktioner.
Tabelnavn
Viser eller skjuler rækken for tabelnavnet.
Aliasnavn
Viser eller skjuler rækken for aliasnavnet.
Entydige værdier
Anvender kun entydige værdier til forespørgslen. Dette gælder for dataposter, der indeholder data, som fremtræder flere gange i de valgte felter. Hvis kommandoen Entydige værdier er aktiv, vil du kun se én datapost i forespørgslen (DISTINCT). Ellers vil du se alle dataposter svarende til forespørgslens kriterium (ALL).
For eksempel, hvis navnet "Smith" forekommer adskillige gange i din adressedatabase, kan du vælge kommandoen Entydige værdier for at angive i forespørgslen, at navnet "Smith" kun skal forekomme én gang.
For en forespørgsel, som involverer adskillige felter, skal kombinationen af værdier fra alle felter være unikke, så resultatet kan være skabt fra en bestemt datapost. For eksempel kan du have "Smith i Chicago" én gang i din adressebog og "Smith i London" to gange. Med kommandoen Entydige værdier, vil forespørgslen bruge de to felter "efternavn" og "by" og returnere forespørgselsresultat "Smith i Chicago" én gang og "Smith i London" én gang.
I SQL svarer denne kommando svarer til prædikatet DISTINCT.
Grænseværdi
Gør det muligt for dig at maksimere antallet af rækker som forespørgslen returnerer.
Hvis der er tilføjet en Begrænsning, vil du få lige så mange rækker som tallet angiver. Ellers vil du se så mange rækker som forespørgselskriterierne angiver.
Formulerer filteregenskaber
Når du formulerer filteregenskaber, er forskellige operatorer og kommandoer tilgængelige for dig. Bortset fra de relationelle operatorer, er der SQL-specifikke kommandoer der forespørger i indholdet af databasefelter. Hvis du bruger disse kommandoer i LibreOffice syntaksen, konverterer LibreOffice automatisk disse til den tilsvarende SQL-syntaks. Du kan også indtaste SQL-kommandoen direkte. De følgende tabeller giver et overblik over disse operatorer og kommandoer:
Operator |
Betydning |
Betingelse er tilfredsstillet hvis... |
= |
lig med |
... indholdet af feltet er identisk med den viste udtryk. Operatoren = bliver ikke vist i forespørgselsfelterne. Hvis du indtaster en værdi uden operator, vil operatoren = automatisk blive benyttet. |
<> |
forskellig fra |
... indholdet af feltet svarer ikke til det angivne udtryk. |
> |
større end |
... indholdet af feltet er større end det angivne udtryk. |
< |
mindre end |
... indholdet af feltet er mindre end det angivne udtryk. |
>= |
større end eller lig med |
... indholdet af feltet er større end eller lig med det angivne udtryk. |
<= |
mindre end eller lig med |
... indholdet af feltet er mindre end eller lig med det angivne udtryk. |
Eksempler
='Fr.' |
returnerer feltnavne med feltindholdet "Fr." |
<'2001-01-10' |
returnerer datoer som forekom før 10. januar 2001 |
LIKE 'g?v' |
returnerer feltnavne med feltindhold såsom "giv" og "gav". |
LIKE 's*' |
returnerer datafelter med feltindhold såsom "Sol". |
BETWEEN 10 AND 20 |
returnerer feltnavne med felt indhold mellem værdierne 10 og 20. (felterne kan være enten tekstfelter eller felter med tal). |
IN (1; 3; 5; 7) |
returnerer feltnavne med værdierne 1, 3, 5, 7. Hvis feltnavnet indeholder et elementnummer, kan du oprette en forespørgsel som returnerer elementet der har det angivne nummer. |
NOT IN ('Smith') |
returnerer feltnavne som ikke indeholder "Smith". |
Som Escape sekvens: {escape 'escape-tegn'}
Eksempel: select * from Element where ElementNavn like '*%' {escape '*'}
Dette eksempel vil give dig alle elementerne hvor navnet begynder med tegnet '*'. Dette betyder at du også kan søge efter tegn som ellers ville fortolkes som pladsholdere, såsom *, ?, _, % eller punktum.
Outer Join Escape sekvens: {oj outer-join}
Eksempel: select Artikel.* from {oj element LEFT OUTER JOIN ordrer ON element.nr=ordrer.ANR}
Forespørge på tekstfelter
For at forespørge på indholdet af et tekstfelt skal du sætte udtrykket i enkelt citationstegn. Skelnen mellem store og små bogstaver afhænger af databasen, der benyttes. Ved LIKE skelnes der per definition mellem store og små bogstave (selv om nogle databaser ikke tager det så nøje).
Forespørge på datofelter
Datofelter er repræsenteret som #Dato# for klart at identificere dem som datoer. Dato, tid og dato/tid konstantværdier, der anvendes i betingelser, kan være i enten SQL escape syntaks eller i standard SQL2 syntaks.
Dato Type Element |
SQL escape syntaks #1 - kan være forældet |
SQL escape syntaks #2 |
SQL2 syntaks |
Dato |
{D'ÅÅÅÅ-MM-DD'} |
{d 'ÅÅÅÅ-MM-DD'} |
'ÅÅÅÅ-MM-DD' |
Tid |
{D'TT:MM:SS'} |
{t 'TT:MI:SS[.SS]'} |
'TT:MI:SS[.SS]' |
Dato klokkeslæt |
{D'ÅÅÅÅ-MM-DD TT:MM:SS'} |
{ts 'ÅÅÅÅ-MM-DD TT:MM:SS[.SS]'} |
'ÅÅÅÅ-MM-DD TT:MI:SS[.SS]' |
Eksempel: select {d '1999-12-31'} from verden.år
Eksempel: select * from mytable where years='1999-12-31'
Alle datoudtryk (konstantværdier) skal omgives af enkelte anførselstegn. (Se flere detaljer i henvisningen til den særlige database og databaseforbindelse, du bruger.)
Spørge på Ja/Nej felter
For at spørge på Ja/Nej felter benyttes følgende syntaks for dBASE tabeller:
Status |
Forespørgsels kriterium |
Eksempel |
Ja |
For dBASE tabeller: forskellig fra hvilken som helst givet værdi |
=1 returnerer alle dataposter hvor Ja/Nej-feltet har status "Ja" eller "Aktiveret" (udvalgte i sort), |
Nej |
. |
=0 returnerer alle dataposter for hvilken Ja/Nej-feltet der har status "Nej" eller "Deaktiver" (ingen valg). |
Null |
IS NULL |
IS NULL returnerer alle dataposter for hvilken Ja/Nej-feltet har ingen af tilstandene Ja eller Nej (valgt i grå). |
Syntaksen afhænger af databasen der benyttes. Bemærk også at Ja/Nej felter kan være defineret forskelligt (kun 2 udtryk i stedet for 3).
Parameterforespørgsel
Parameterforespørgsler lader brugeren indtaste værdier i kørselstiden. Disse værdier bruges i kriterierne til at vælge de dataposter, der skal vises. Hver af disse værdier har tilknyttet et parameternavn, som bruges kalde brugeren, mens forespørgslen køres.
Parameternavne indledes med et kolon i både Design- og SQL-visninger af en forespørgsel. De kan bruges når som helst der kan optræde en værdi. Hvis den samme værdi skal optræde mere end en gang i forespørgsel, skal du bruge det samme parameternavn.
I det enkleste tilfælde, hvor brugeren indtaster en værdi, der matches efter sammenfald, indtastes parameternavnet med sit indledende kolon simpelthen i rækken Kriterie. I SQL-tilstand skal det indtastes som WHERE "Field" = :Parameternavn
Parameternavne må ikke indeholde nogen af tegnene <space>`!"$%^*()+={}[]@'~#<>?/,. De må ikke være feltnavne eller SQL-reserverede ord. De kan hedde det samme som aliasser.
Et nyttig redskab til at markere dataposter baseret på dele af et tekstfelts indhold er at tilføje en skjult kolonne med kriteriet"LIKE '%' || :Del_af_felt || '%'". Dette vil markere dataposter med en nøjagtigt overensstemmelse. Hvis der ønskes en versal-ufølsom test, er en løsningat bruge LOWER (Field_Name) som felt ogLIKE LOWER ( '%' || :Del_af_felt || '%' ) som kriterie. Bemærk, at mellemrummene i kriteriet er vigtige; hvis de udelades, fortolker SQL-parseren hele kriteriet som en streng, der skal matches. I SQL-tilstand skulle dette indtastes somLOWER ( "Field_Name" ) LIKE LOWER ( '%' || :Part_of_field || '%' ).
Parameterforespørgsler kan bruges som datakilde til underformularer for at tillade brugeren at begrænse de viste dataposter.
Parameterindtastning
Dialogen Parameterindtastningbeder brugeren om at indtaste parameterværdierne. Indtast en værdi for hvert forespørgselsparameter og bekræft ved at klikke på OK eller trykke påEnter-tasten.
De værdier, der er indtastet af brugeren, kan bestå af vilkårlige tegn, som er tilladt i SQL for det relevante kriterie; dette kan afhænge på det underliggende databasesystem.
Brugeren kan bruge SQL-jokertegn "%" (vilkårlig streng) eller "_" (vilkårligt enkelttegn) som en del af værdien for at hente dataposter med mere komplekse kriterier.
SQL-tilstand
SQL står for "Structured Query Language" og beskriver instruktioner til opdatering og administration af relationsdatabaser.
I LibreOffice behøver du ikke kende noget til SQL for de fleste forespørgsler, da du ikke behøver at indtaste SQL-koden. Hvis du opretter en forespørgsel i forespørgselsdesignet, konverterer LibreOffice automatisk dine instruktioner til den tilsvarende SQL-syntaks. Hvis du, ved hjælp af knappen Slå designvisning til/fra, vil skifte til SQL-visning, kan du se SQL-kommandoer for en forespørgsel, der er blevet oprettet tidligere.
Du kan formulere din forespørgsel direkte i SQL-koden. Bemærk dog, at den specielle syntaks er afhængig af det databasesystem, som du bruger.
Hvis du indtaster SQL-kode manuelt, kan du oprette SQL-specifikke forespørgsler, som ikke understøttes i den grafiske grænseflade i Forespørgselsdesign. Disse forespørgsler skal udføres i egentlig SQL-tilstand.
Ved at klikke på ikonet Udfør SQL-kommando direkte i SQL-visning kan du formulere en forespørgsel, som ikke behandles af LibreOffice.