LibreOffice 24.8 Help
Met de Query-ontwerpweergave kunt u een databasequery maken en bewerken.
De meeste databases gebruiken query's om databasetabellen te filteren of te sorteren, om records op uw computer weer te geven. Weergaven bieden dezelfde functionaliteit als query's, maar dan aan de serverkant. Als uw database zich op een server bevindt die weergaven ondersteunt, kunt u weergaven gebruiken om de records op de server te filteren om de weergavetijd te versnellen.
Als u de opdracht Weergave maken selecteert op het tabblad Tabellen van een databasedocument, ziet u het venster Ontwerp bekijken dat lijkt op het venster Query-ontwerp dat hier wordt beschreven.
De indeling van het venster Query-ontwerp wordt opgeslagen met een gemaakte query, maar kan niet worden opgeslagen met een gemaakte weergave.
Als u een query wilt maken, klikt u op het pictogram Query's in een databasedocument en klikt u vervolgens op Query maken in ontwerpweergave.
In het onderste deelvenster van de ontwerpweergave definieert u de query. Om een query te definiëren, specificeert u de namen van de databasevelden die u wilt opnemen en de criteria voor het weergeven van de velden. Om de kolommen in het onderste deelvenster van de ontwerpweergave te herschikken, sleept u een kolomkop naar een nieuwe locatie of selecteert u de kolom en drukt u op +pijltoets.
Boven in het venster van de query-ontwerpweergave, de pictogrammen van de werkbalk Query-ontwerp en de werkbalk Ontwerp worden weergegeven.
Als u een query wilt testen, dubbelklikt u op de naam van de query in het databasedocument. Het queryresultaat wordt weergegeven in een tabel die lijkt op de gegevensbronweergave. Opmerking: de weergegeven tabel is slechts tijdelijk.
| Sleutel | Functie | 
|---|---|
| F4 | Voorbeeld | 
| F5 | Query uitvoeren | 
| F7 | Tabel of query toevoegen | 
Wanneer u het query-ontwerp voor de eerste keer opent, ziet u een dialoogvenster waarin u eerst de tabel of query moet selecteren die de basis zal vormen voor uw nieuwe query.
Dubbelklik op velden om ze aan de query toe te voegen. Slepen en neerzetten om relaties te definiëren.
Tijdens het ontwerpen van een query kunt u de geselecteerde tabellen niet wijzigen.
Om de tabel uit de ontwerpweergave te verwijderen, klikt u op de bovenrand van het tabelvenster en geeft u het contextmenu weer. U kunt de opdracht Verwijderen gebruiken om de tabel uit de ontwerpweergave te verwijderen. Een andere optie is om op de Delete-toets te drukken.
U kunt de grootte van de tabellen wijzigen en rangschikken naar uw voorkeuren. Om tabellen te verplaatsen, sleept u de bovenrand naar de gewenste positie. Vergroot of verklein de grootte waarin de tabel wordt weergegeven door de muisaanwijzer op een rand of op een hoek te plaatsen en de tabel te slepen totdat deze de gewenste grootte heeft.
Als er gegevensrelaties zijn tussen een veldnaam in de ene tabel en een veldnaam in een andere tabel, kunt u deze relaties gebruiken voor uw query.
Als u bijvoorbeeld een werkblad heeft voor artikelen die worden geïdentificeerd door een artikelnummer en een werkblad voor klanten waarin u alle artikelen die een klant bestelt vastlegt met de bijbehorende artikelnummers, dan is er een relatie tussen de twee datavelden "artikelnummers". Als u nu een query wilt maken die alle artikelen retourneert die een klant heeft besteld, moet u gegevens ophalen uit twee werkbladen. Om dit te doen, moet u LibreOffice informeren over de relatie die bestaat tussen de gegevens in de twee werkbladen.
Klik hiervoor op een veldnaam in een tabel (bijvoorbeeld de veldnaam "Artikelnummer" uit de tabel Klant), houd de muisknop ingedrukt en sleep de veldnaam naar de veldnaam van de andere tabel (" Artikelnummer" uit de Artikeltabel). Wanneer u de muisknop loslaat, verschijnt een lijn die de twee velden tussen de twee tabelvensters verbindt. De bijbehorende voorwaarde dat de inhoud van de twee veldnamen identiek moet zijn, wordt ingevoerd in de resulterende SQL-query.
Het maken van een query die is gebaseerd op verschillende gerelateerde bladen is alleen mogelijk als u LibreOffice gebruikt als interface voor een relationele database.
U kunt in een query geen toegang krijgen tot tabellen uit verschillende databases. Query's met meerdere tabellen kunnen alleen binnen één database worden gemaakt.
Als u dubbelklikt op de lijn die twee gekoppelde velden verbindt of de menu-opdracht Invoegen - Nieuwe relatie oproept, kunt u het type relatie specificeren in het dialoogvenster Relaties.
U kunt ook op Tab drukken totdat de regel is geselecteerd, dan op Shift+F10 drukken om het contextmenu weer te geven en daar de opdracht Bewerken te kiezen. Sommige databases ondersteunen slechts een subset van de mogelijke join-typen.
Om een relatie tussen twee tabellen te verwijderen, klikt u op de verbindingslijn en drukt u vervolgens op de Delete-toets.
U kunt ook de respectievelijke vermeldingen in Betrokken velden in het dialoogvenster Relaties verwijderen. Of druk op Tab totdat de verbindende vector gemarkeerd wordt weergegeven, druk dan op Shift+F10 om het contextmenu te openen en selecteer de opdracht Verwijderen.
Selecteer voorwaarden om de query te definiëren. Elke kolom van de ontwerptabel accepteert een gegevensveld voor de query. De voorwaarden in één rij zijn gekoppeld aan een Booleaanse AND.
Selecteer eerst alle veldnamen uit de tabellen die u aan de query wilt toevoegen. U kunt dit doen door te slepen en neer te zetten of door te dubbelklikken op een veldnaam in het tabelvenster. Gebruik bij de methode slepen en neerzetten de muis om een veldnaam van het tabelvenster naar het onderste gedeelte van het query-ontwerpvenster te slepen. Terwijl u dit doet, kunt u beslissen in welke kolom in het query-ontwerpvenster het geselecteerde veld wordt weergegeven. Een veldnaam kan ook worden geselecteerd door te dubbelklikken. Het wordt dan toegevoegd aan de volgende vrije kolom in het query-ontwerpvenster.
Om een veldnaam uit de query te verwijderen, klikt u op de kolomkop van het veld en kiest u de opdracht Verwijderen in het contextmenu voor de kolom.
Gebruik het pictogram Opslaan op de werkbalk Standaard om de zoekopdracht op te slaan. U ziet een dialoogvenster waarin u wordt gevraagd een naam voor de query in te voeren. Als de database schema's ondersteunt, kunt u ook een schemanaam invoeren.
Voer de naam in van het schema dat is toegewezen aan de query- of tabelweergave.
Voer de naam van de query of tabelweergave in.
Als u gegevens voor de query wilt filteren, stelt u de gewenste criteria in het onderste gedeelte van het query-ontwerpvenster in. De volgende opties zijn beschikbaar:
Voer de naam in van het gegevensveld waarnaar in de query wordt verwezen. Alle instellingen in de filteroptierijen verwijzen naar dit veld. Als u hier een cel activeert met een muisklik ziet u een pijlknop waarmee u een veld kunt selecteren. De optie "Tabelnaam.*" selecteert alle gegevensvelden met als gevolg dat de opgegeven criteria worden toegepast op alle tabelvelden.
Specificeert een alias. Deze alias wordt in de query weergegeven in plaats van de veldnaam. Dit maakt het mogelijk om door de gebruiker gedefinieerde kolomlabels te gebruiken. Als het gegevensveld bijvoorbeeld PtNo heet en u in plaats van die naam wilt dat PartNum in de query verschijnt, voert u PartNum in als alias.
In een SQL-instructie worden aliassen als volgt gedefinieerd:
SELECT kolom AS alias FROM tabel.
Bijvoorbeeld:
SELECT "PtNo" AS "PartNum" FROM "Parts"
De bijbehorende databasetabel van het geselecteerde gegevensveld wordt hier weergegeven. Als u deze cel activeert met een muisklik, verschijnt er een pijl waarmee u een andere tabel voor de huidige query kunt selecteren.
Als u op deze cel klikt, kunt u een sorteeroptie kiezen: oplopend, aflopend en ongesorteerd. Tekstvelden worden alfabetisch gesorteerd en numerieke velden numeriek. Voor de meeste databases kunnen beheerders de sorteeropties op databaseniveau instellen.
Als u de eigenschap Zichtbaar markeert voor een gegevensveld, wordt dat veld zichtbaar weergegeven in de resulterende query. Als u een gegevensveld alleen gebruikt om een voorwaarde te formuleren of een berekening te maken, hoeft u deze niet per se weer te geven.
Specificeert een eerste criterium waarop de inhoud van het gegevensveld moet worden gefilterd.
Hier kunt u per regel één extra filtercriterium invoeren. Meerdere criteria in een enkele kolom worden geïnterpreteerd als booleaanse OF.
U kunt ook het contextmenu van de regelkoppen in het onderste gedeelte van het query-ontwerpvenster gebruiken om een filter in te voegen op basis van een functie:
De functies die hier beschikbaar zijn, zijn afhankelijk van de functies die door de database-engine worden geleverd.
Als u met de ingebouwde HSQL-database werkt, biedt de keuzelijst in de rij Functie u de volgende opties:
| Optie | SQL | Effect | 
|---|---|---|
| Geen functie | Er wordt geen functie uitgevoerd. | |
| Gemiddelde | AVG | Berekent het rekenkundig gemiddelde van een veld. | 
| Aantal | COUNT | Bepaalt het aantal records in de tabel. Lege velden kunnen worden geteld (a) of uitgesloten (b). a) AANTAL(*): het doorgeven van een asterisk als argument telt alle records in de tabel. b) AANTAL(kolom): het doorgeven van een veldnaam als argument telt alleen de records waarin het opgegeven veld een waarde bevat. Records waarin het veld een Null-waarde heeft (d.w.z. geen tekstuele of numerieke waarde bevat) worden niet meegeteld. | 
| Maximum | MAX | Bepaalt de hoogste waarde van een record voor dat veld. | 
| Minimum | MIN | Bepaalt de laagste waarde van een record voor dat veld. | 
| Som | SUM | Berekent de som van de waarden van records voor de gekoppelde velden. | 
| Groeperen | GROUP BY | Groepeert querygegevens op basis van de geselecteerde veldnaam. Functies worden uitgevoerd volgens de opgegeven groepen. In SQL komt deze optie overeen met de GROUP BY-clausule. Als een criterium wordt toegevoegd, verschijnt dit item in de subclausule SQL HAVING. | 
U kunt functie-aanroepen ook rechtstreeks in de SQL-instructie invoeren. De syntaxis is:
SELECT FUNCTION(kolom) FROM tabel.
De functie-aanroep in SQL voor het berekenen van een som is bijvoorbeeld:
SELECT SUM("Priis") FROM "Artikel".
Behalve de functie Groeperen, worden de bovenstaande functies aggregaatfuncties genoemd. Dit zijn functies die gegevens berekenen om samenvattingen van de resultaten te maken. Extra functies die niet in de keuzelijst staan, zijn wellicht ook mogelijk. Deze zijn afhankelijk van de specifieke database-engine die wordt gebruikt en van de huidige functionaliteit die wordt geboden door het basisstuurprogramma dat wordt gebruikt om verbinding te maken met die database-engine.
Om andere functies te gebruiken die niet in de lijst staan, moet u ze handmatig invoeren onder Veld.
U kunt ook aliassen toewijzen aan functie-aanroepen. Als u de queryreeks niet in de kolomkop wilt weergeven, voert u een gewenste vervangende naam in onder Alias.
De corresponderende functie in een SQL-statement is:
SELECT FUNCTION() AS alias FROM tabel
Voorbeeld:
SELECT COUNT(*) AS count FROM "Item"
Als u een dergelijke functie uitvoert, kunt u geen extra kolommen voor de query invoegen, behalve als argument in een functie "Groeperen".
Voorbeelden
In het volgende voorbeeld wordt een query uitgevoerd via twee tabellen: een tabel "Artikel" met het veld "Artikelnr" en een tabel "Leveranciers" met het veld "Naam leverancier". Bovendien hebben beide tabellen een gemeenschappelijke veldnaam "Leverancier_Num."
De volgende stappen zijn vereist om een query te maken met alle leveranciers die meer dan drie artikelen leveren.
Voeg de tabellen 'Artikel' en 'Leveranciers' in het query-ontwerp in.
Koppel de velden "Leverancier_Num" van de twee tabellen als er nog geen relatie van dit type is.
Dubbelklik op het veld "Artikel_Nee" in de tabel "Artikel". Geef de regel Functie weer met behulp van het contextmenu en selecteer de functie Aantal.
Voer >3 in als criterium en schakel het veld Zichtbaar uit.
Dubbelklik op het veld "Naam leverancier" in de tabel "Leveranciers" en kies de functie Groeperen.
Voer de query uit.
Als de velden "prijs" (voor de individuele prijs van een artikel) en "Leverancier_Num" (voor de leverancier van het artikel) in de tabel "Artikel" bestaan, kunt u de gemiddelde prijs van het artikel verkrijgen dat een leverancier met de volgende vraag:
Voeg de tabel "Item" in het query-ontwerp in.
Dubbelklik op de velden "Prijs" en "Leverancier_Num".
Schakel de regel Functie in en selecteer de functie Gemiddelde in het veld "Prijs".
U kunt ook "Gemiddelde" invoeren in de regel voor de aliasnaam (zonder aanhalingstekens).
Kies Groeperen voor het veld "Leverancier_Num".
Voer de query uit.
De volgende opdrachten en symbolen in het contextmenu zijn beschikbaar:
Toont of verbergt een rij voor de selectie van functies.
Toont of verbergt de rij voor de tabelnaam.
Toont of verbergt de rij voor de aliasnaam.
Haalt alleen afzonderlijke waarden op uit de query. Dit is van toepassing op meerdere records die meerdere herhaalde voorkomens van gegevens in de geselecteerde velden kunnen bevatten. Als de opdracht Unieke waarden actief is, zou u slechts één record in de query moeten zien (EENDUIDIG). Anders ziet u alle records die overeenkomen met de zoekcriteria (ALL).
Als de naam "Smith" bijvoorbeeld meerdere keren voorkomt in uw adressenbestand, kunt u de opdrachtUnieke waarden kiezen om in de query aan te geven dat de naam "Smith" slechts één keer voorkomt.
Voor een query met meerdere velden moet de combinatie van waarden uit alle velden uniek zijn, zodat het resultaat uit een specifiek record kan worden gevormd. U hebt bijvoorbeeld "Smith in Chicago" één keer in uw adresboek en "Smith in Londen" twee keer. Met de opdrachtUnieke waarden, gebruikt de query de twee velden "achternaam" en "stad" en retourneert het zoekresultaat eenmaal "Smith in Chicago" en eenmaal "Smith in Londen".
In SQL komt deze opdracht overeen met het predicaat DISTINCT.
Hiermee kunt u het maximale aantal records beperken dat door een query wordt geretourneerd.
Als er een Limiet-constructie wordt toegevoegd, krijgt u maximaal zoveel rijen als het aantal dat u opgeeft. Anders ziet u alle records die overeenkomen met de zoekcriteria.
Bij het formuleren van filtervoorwaarden staan verschillende operators en commando's tot je beschikking. Naast de relationele operators zijn er SQL-specifieke commando's die de inhoud van databasevelden opvragen. Als u deze commando's gebruikt in de syntaxis LibreOffice, converteert LibreOffice deze automatisch naar de bijbehorende SQL-syntaxis via een interne parser. U kunt de SQL-opdracht ook rechtstreeks invoeren en de interne parser omzeilen. De volgende tabellen geven een overzicht van de operators en commando's:
| Operator | Betekenis | Aan voorwaarde is voldaan als... | 
|---|---|---|
| = | gelijk aan | ... de inhoud van het veld is identiek aan de opgegeven uitdrukking. De operator = wordt niet weergegeven in de zoekvelden. Als u een waarde invoert zonder operator, wordt automatisch uitgegaan van de = operator. | 
| <> | niet gelijk aan | ... de inhoud van het veld komt niet overeen met de opgegeven uitdrukking. | 
| > | groter dan | ... de inhoud van het veld is groter dan de opgegeven uitdrukking. | 
| < | kleiner dan | ... de inhoud van het veld is kleiner dan de opgegeven uitdrukking. | 
| >= | groter dan of gelijk aan | ... de inhoud van het is veld groter dan of gelijk is aan de opgegeven uitdrukking. | 
| <= | kleiner dan of gelijk aan | ... de inhoud van het veld is kleiner dan of gelijk is aan de opgegeven uitdrukking. | 
| ='Ms.' | retourneert veldnamen met de veldinhoud "Ms." | 
| <'2001-01-10' | geeft datums terug die plaatsvonden vóór 10 januari 2001 | 
| LIKE 'H?llo' | retourneert records met veldinhoud zoals "give" en "gave". | 
| LIKE 'S*' | retourneert records met veldinhoud zoals "Sun". | 
| BETWEEN 10 AND 20 | retourneert records met veldinhoud tussen de waarden 10 en 20. (De velden kunnen tekstvelden of getalvelden zijn). | 
| IN (1; 3; 5; 7) | retourneert records met de waarden 1, 3, 5, 7. Als de veldnaam bijvoorbeeld een itemnummer bevat, kunt u een query maken die het item met het opgegeven nummer retourneert. | 
| NOT IN ('Smith') | retourneert records die geen "Smith" bevatten. | 
Like Escape-reeks: {escape 'escape-teken'}
SELECT * FROM Item WHERE ItemName LIKE 'The *%' {escape '*'}
Het voorbeeld geeft u alle vermeldingen waarbij de itemnaam begint met 'De *'. Dit betekent dat u ook kunt zoeken naar tekens die anders als tijdelijke aanduidingen zouden worden geïnterpreteerd, zoals *, ?, _, % of de punt.
Outer Join Escape Sequence: {oj outer-join}
SELECT Article.* FROM {oj item LEFT OUTER JOIN orders ON item.no=orders.ANR}
Als u de inhoud van een tekstveld wilt opvragen, moet u de uitdrukking tussen enkele aanhalingstekens plaatsen. Het onderscheid tussen hoofdletters en kleine letters hangt af van de database die wordt gebruikt. LIKE is per definitie hoofdlettergevoelig (hoewel sommige databases dit niet strikt interpreteren).
Datumvelden worden weergegeven als #Date# om ze duidelijk als datums te identificeren. Datum-, tijd- en datum-/tijdconstanten (literalen) die in voorwaarden worden gebruikt, kunnen van het type SQL Escape-syntaxis of de standaard SQL2-syntaxis zijn.
| Datumtype-element | SQL Escape-syntaxis #1 - is mogelijk verouderd | SQL Escape-syntaxis #2 | SQL2 syntaxis | 
|---|---|---|---|
| Datum | {D'YYYY-MM-DD'} | {d 'YYYY-MM-DD'} | 'YYYY-MM-DD' | 
| Tijd | {D'HH:MM:SS'} | {t 'HH:MI:SS[.SS]'} | 'HH:MI:SS[.SS]' | 
| DatumTijd | {D'YYYY-MM-DD HH:MM:SS'} | {ts 'YYYY-MM-DD HH:MI:SS[.SS]'} | 'YYYY-MM-DD HH:MI:SS[.SS]' | 
SELECT {d '1999-12-31'} FROM world.years
SELECT * FROM mytable WHERE years='1999-12-31'
Alle datum-uitdrukkingen (letterlijke datums) moeten tussen enkele aanhalingstekens staan. (Raadpleeg de referentie voor de specifieke database en connector die u gebruikt voor meer details.)
Gebruik de volgende syntaxis voor dBASE-tabellen om Ja/Nee-velden op te vragen:
| Status | Query-criterium | Voorbeeld | 
|---|---|---|
| Ja | voor dBASE-tabellen: niet gelijk aan een bepaalde waarde | =1 geeft alle records terug waarvan het Ja/Nee-veld de status "Ja" of "Aan" heeft (geselecteerd in zwart), | 
| Nee | . | =0 retourneert alle records waarvoor het veld Ja/Nee de status "Nee" of "Uit" heeft (geen selectie). | 
| Null | IS NULL | IS NULL retourneert alle records waarvoor het veld Ja/Nee geen van de staten Ja of Nee heeft (grijs geselecteerd). | 
De syntaxis is afhankelijk van het gebruikte databasesysteem. Houd er ook rekening mee dat Ja/Nee-velden anders kunnen worden gedefinieerd (slechts 2 toestanden in plaats van 3).
Met parameterquery's kan de gebruiker tijdens runtime waarden invoeren. Deze waarden worden gebruikt binnen de criteria voor het selecteren van de weer te geven records. Aan elke dergelijke waarde is een parameternaam gekoppeld, die wordt gebruikt om de gebruiker te vragen wanneer de query wordt uitgevoerd.
Parameternamen worden voorafgegaan door een dubbele punt in zowel de ontwerp- als de SQL-weergave van een query. Dit kan overal worden gebruikt waar een waarde kan verschijnen. Als dezelfde waarde meer dan één keer in de query moet voorkomen, wordt dezelfde parameternaam gebruikt.
In het eenvoudigste geval, waarbij de gebruiker een waarde invoert die overeenkomt voor gelijkheid, wordt de parameternaam met de voorafgaande dubbele punt eenvoudig ingevoerd in de rij Criterium. In SQL-modus moet dit worden getypt als WHERE "Field" = :Parameter_name
Parameternamen mogen geen van de tekens <space>`!"$%^*()+={}[]@'~#<>?/, bevatten. mogen niet hetzelfde zijn als veldnamen of gereserveerde SQL-woorden. Ze kunnen hetzelfde zijn als aliassen.
Een handige manier om records te selecteren op grond van de inhoud is het toevoegen van verborgen kolom met "LIKE '%' || :Part_of_field || '%'" als criterium. Hierdoor worden records geselecteerd die overeenkomen. Als u een hoofdletterongevoelige test wilt doen, kunt u een LOWER (Field_Name) als het veld gebruiken en LIKE LOWER ( '%' || :Part_of_field || '%' ) als criterium. Hier zijn de spaties in het criterium van belang, zonder de spaties ziet de SQL-parser het criterium als onderdeel van de te zoeken tekenreeks die moet overeenkomen. In SQL-mode moet dit worden ingevuld als LOWER ( "Field_Name" ) LIKE LOWER ( '%' || :Part_of_field || '%' ).
Parameterquery's kunnen worden gebruikt als gegevensbron voor subformulieren, zodat de gebruiker de weergegeven records kan beperken.
Het dialoogvenster Parameterinvoer vraagt de gebruiker om de parameterwaarden in te voeren. Voer een waarde in voor elke queryparameter en bevestig door op OK te klikken of Enter te typen.
De door de gebruiker ingevoerde waarden mogen bestaan uit alle karakters die voor de SQL voor het betreffende criterium toelaatbaar zijn; dit kan afhankelijk zijn van het onderliggende databasesysteem.
De gebruiker kan de SQL-jokertekens "%" (willekeurige tekenreeks) of "_" (willekeurig enkel teken) gebruiken als onderdeel van de waarde om records met complexere criteria op te halen.
SQL staat voor "Structured Query Language" en beschrijft instructies voor het bijwerken en beheren van relationele databases.
In LibreOffice heeft u voor de meeste query's geen kennis van SQL nodig, aangezien u de SQL-code niet hoeft in te voeren. Als u een query maakt in de query-ontwerper, converteert LibreOffice uw instructies automatisch naar de bijbehorende SQL-syntaxis. Als u met behulp van de knop Ontwerpweergave Aan/Uit schakelt, naar de SQL-weergave gaat, kunt u de SQL-commando's zien voor een query die al is gemaakt.
U kunt uw vraag direct in SQL-code formuleren. Houd er echter rekening mee dat de speciale syntaxis afhankelijk is van het databasesysteem dat u gebruikt.
Als u de SQL-code handmatig invoert, kunt u SQL-specifieke query's maken die niet worden ondersteund door de grafische interface in de Query-ontwerper. Deze query's moeten worden uitgevoerd in de native SQL-modus.
Door te klikken op het pictogram SQL-opdracht direct uitvoeren in de SQL-weergave, kunt u formuleer een query die niet wordt verwerkt door LibreOffice en rechtstreeks naar de database-engine wordt verzonden.