Inhalte

# Abfrageentwurf

Die Ansicht Abfrage-Entwurf erlaubt Ihnen, eine Datenbank-Abfrage zu erstellen und zu bearbeiten.

Auf diesen Befehl zugreifen …

Klicken Sie in einem Datenbank-Dateifenster auf das Symbol Abfragen und wählen Sie dann Bearbeiten – Bearbeiten…

Die meisten Datenbanken verwenden Abfragen zum Filtern oder Sortieren von Datenbanktabellen, um Datensätze auf Ihrem Computer anzuzeigen. Ansichten bieten dieselbe Funktionalität wie Abfragen, jedoch auf der Serverseite. Wenn sich Ihre Datenbank auf einem Server befindet, der Ansichten unterstützt, können Sie Ansichten verwenden, um die Datensätze auf dem Server zu filtern, um die Anzeigezeit zu beschleunigen.

Wenn Sie den Befehl Ansicht erstellen auf dem Register Tabellen eines Datenbankdokuments auswählen, sehen Sie das Fenster Ansichtsdesign, das dem beschriebenes Fenster Abfragedesign ähnelt.

Das Layout des Fensters Abfrageentwurf wird mit einer erstellten Abfrage gespeichert, kann aber nicht mit einer erstellten Ansicht gespeichert werden.

## Die Ansicht Entwurf

Um eine Abfrage zu erstellen, klicken Sie in einem Datenbankdokument auf das Symbol Abfragen und dann auf Abfrage in der Entwurfsansicht erstellen.

Im unteren Bereich der Entwurfsansicht definieren Sie die Abfrage. Um eine Abfrage zu definieren, legen Sie die einzuschließenden Datenbankfeldnamen und die Kriterien für die Anzeige der Felder fest. Um die Spalten im unteren Bereich der Entwurfsansicht neu anzuordnen, ziehen Sie eine Spaltenüberschrift an eine neue Position oder wählen Sie die Spalte aus und drücken Sie [BefehlStrg+Pfeiltaste].

Oben im Fenster der Abfrageentwurfsansicht werden die Symbole der Leisten Abfragedesign und Design angezeigt.

Wenn Sie eine Abfrage testen möchten, doppelklicken Sie auf den Abfragenamen im Datenbankdokument. Das Abfrageergebnis wird in einer Tabelle ähnlich der Datenquellenansicht angezeigt. Hinweis: Die angezeigte Tabelle ist nur temporär.

### Tastenkombinationen in der Ansicht Abfrageentwurf

Tastenkombination | Funktion
--- | ---
[F4] | Vorschau
[F5] | Abfrage ausführen
[F7] | Tabelle oder Abfrage hinzufügen

## Durchsuchen

Wenn Sie den Abfrageentwurf erstmals öffnen, sehen Sie einen Dialog, in dem Sie zunächst die Tabelle oder Abfrage auswählen müssen, welche die Basis für Ihre neue Abfrage sein wird.

Doppelklicken Sie auf Felder, um sie der Abfrage hinzuzufügen. Verwenden Sie Ziehen-und-Ablegen zum Definieren von Relationen.

Während des Entwurfs einer Abfrage können Sie die ausgewählten Tabellen nicht verändern.

### Tabellen entfernen

Um die Tabelle aus der Entwurfsansicht zu entfernen, klicken Sie auf den oberen Rand des Tabellenfensters und öffnen Sie das Kontextmenü. Sie können den Befehl Löschen verwenden, um die Tabelle aus der Entwurfsansicht zu entfernen. Eine andere Möglichkeit besteht darin, Entf zu drücken.

### Tabelle verschieben und Tabellengröße ändern

Sie können die Tabellen nach Ihren Wünschen skalieren und anordnen. Um Tabellen zu verschieben, ziehen Sie den oberen Rand an die gewünschte Position. Vergrößern oder verkleinern Sie die Anzeige der Tabelle, indem Sie den Mauszeiger auf einen Rand oder eine Ecke positionieren und die Tabelle auf die gewünschte Größe ziehen.

## Tabellen-Relationen

Wenn Datenrelationen zwischen den Feldnamen zweier Tabelle bestehen, können Sie diese Relationen für Ihre Abfrage verwenden.

Besitzen Sie beispielsweise eine Tabelle für Artikel, die durch eine Artikelnummer identifiziert werden, und eine Tabelle für Kunden, in der Sie alle Artikel erfassen, die ein Kunde mit den entsprechenden Artikelnummern bestellt, dann besteht ein Zusammenhang zwischen den beiden Datenfeldern "Artikelnummer". Wenn Sie nun eine Abfrage erstellen möchten, die alle Artikel zurückgibt, die ein Kunde bestellt hat, müssen Sie Daten aus zwei Tabellen abrufen. Dazu müssen Sie LibreOffice über die Relation informieren, die zwischen den Daten in den beiden Tabellen besteht.

Klicken Sie dazu in einer Tabelle auf einen Feldnamen (beispielsweise den Feldnamen "Artikelnummer" aus der Tabelle Kunde), halten Sie die Maustaste gedrückt und ziehen Sie dann den Feldnamen auf den Feldnamen der anderen Tabelle ("Artikelnumber" aus der Tabelle Artikel). Wenn Sie die Maustaste loslassen, erscheint eine Linie, welche die beiden Felder zwischen den Tabellenfenstern verbindet. Die entsprechende Bedingung, dass der Inhalt der beiden Feldnamen identisch sein muss, wird in die resultierende SQL-Abfrage eingetragen.

Die Erstellung einer Abfrage, die auf mehreren zusammenhängenden Blättern basiert, ist nur möglich, wenn Sie LibreOffice als Schnittstelle für eine relationale Datenbank verwenden.

Sie können in einer Abfrage nicht auf Tabellen aus verschiedenen Datenbanken zugreifen. Abfragen mit mehreren Tabellen können nur innerhalb einer Datenbank erstellt werden.

### Den Relationstyp festlegen

Wenn Sie auf die Verbindungslinie zweier verknüpfter Felder doppelt anklicken oder im Menü Einfügen – Neue Relation… wählen, können Sie im Dialog Relationen die Art der Relation festlegen.

Alternativ drücken Sie [Tabulator], bis die Zeile markiert ist, drücken dann [Umschalt+F10], um das Kontextmenü anzuzeigen, und wählen dort den Befehl Bearbeiten . Einige Datenbanken unterstützen nur eine Teilmenge der möglichen Verbundtypen.

### Relationen löschen

Um eine Relation zwischen zwei Tabellen zu löschen, klicken Sie auf die Verbindungslinie und drücken Entf.

Alternativ löschen Sie die entsprechenden Einträge in Beteiligte Felder im Dialog Relationen. Oder Sie drücken [Tabulator], bis der Verbindungsvektor hervorgehoben angezeigt wird, drücken Sie dann [Umschalt+F10], um das Kontextmenü zu öffnen, und wählen Sie den Befehl Löschen .

## Die Abfrage definieren

Wählen Sie Bedingungen aus, um die Abfrage zu definieren. Jede Spalte der Designtabelle akzeptiert ein Datenfeld für die Abfrage. Die Bedingungen in einer Zeile werden mit einem booleschen UND verknüpft.

### Feldnamen festlegen

Wählen Sie zunächst alle Feldnamen der Tabellen aus, die Sie der Abfrage hinzufügen möchten. Dies können Sie entweder per Ziehen-und-Ablegen oder durch Doppelklick auf einen Feldnamen im Fenster Tabellen tun. Ziehen Sie mittels Ziehen-und-Ablegen einen Feldnamen aus dem Fenster Tabellen mit der Maus in den unteren Bereich des Fensters Abfrageentwurf. Dabei können Sie entscheiden, welche Spalte im Fenster Abfrageentwurf das ausgewählte Feld erhält. Ein Feldname kann auch per Doppelklick ausgewählt werden. Es wird dann der nächsten freien Spalte im Fenster Abfrageentwurf hinzugefügt.

### Feldnamen löschen

Um einen Feldnamen aus der Abfrage zu entfernen, klicken Sie auf die Spaltenüberschrift des Felds und wählen Sie im Kontextmenü der Spalte den Befehl Löschen.

### Die Abfrage speichern

Verwenden Sie das Symbol Speichern in der Symbolleiste Standard, um die Abfrage zu speichern. Sie sehen einen Dialog, in dem Sie aufgefordert werden, einen Namen für die Abfrage einzugeben. Wenn die Datenbank Schemen unterstützt, können Sie auch einen Schemennamen eingeben.

#### Schema

Geben Sie den Namen des Schemas ein, das der Abfrage oder Tabellenansicht zugewiesen ist.

#### Name der Abfrage oder Tabellenansicht

Geben Sie den Namen der Abfrage oder Tabellenansicht ein.

### Daten filtern

Um Daten für die Abfrage zu filtern, legen Sie im unteren Bereich des Fensters Abfrageentwurf die gewünschten Kriterien fest. Folgende Optionen stehen zur Verfügung:

#### Feld

Geben Sie den Namen des Datenfelds ein, auf das in der Abfrage verwiesen wird. Alle in den Filteroptionszeilen vorgenommenen Einstellungen beziehen sich auf dieses Feld. Wenn Sie eine Zelle per Mausklick aktivieren, sehen Sie eine Pfeilschaltfläche, mit der Sie ein Feld auswählen können. Die Option "Tabellenname.*" wählt alle Datenfelder aus, so dass die angegebenen Kriterien auf alle Tabellenfelder angewendet werden.

#### Alias

Legt einen Alias fest. Dieser Alias wird in der Abfrage anstelle des Feldnamens aufgeführt. Dadurch ist es möglich, benutzerdefinierte Spaltenbezeichnungen zu verwenden. Wenn das Datenfeld beispielsweise ArtNr heißt und Sie statt dieses Namens ArtikelNr in der Abfrage erscheinen lassen möchten, geben Sie ArtikelNr als Alias ein.

In einer SQL-Anweisung werden Aliase wie folgt definiert:

SELECT Spalte AS Alias FROM Tabelle.

Zum Beispiel:

    SELECT "PtNo" AS "PartNum" FROM "Parts"

#### Tabelle

Listet die entsprechende Datenbanktabelle des ausgewählten Datenfeldes auf. Wenn Sie diese Zelle per Mausklick aktivieren, erscheint ein Pfeil, der es Ihnen ermöglicht, eine andere Tabelle für die aktuelle Abfrage auszuwählen.

#### Sortieren

Wenn Sie auf diese Zelle klicken, können Sie eine Sortieroption auswählen: aufsteigend, absteigend und unsortiert. Textfelder werden alphabetisch und numerische Felder numerisch sortiert. Bei den meisten Datenbanken können Administratoren die Sortieroptionen auf Datenbankebene festlegen.

#### Sichtbar

Wenn Sie die Eigenschaft Sichtbar für ein Datenfeld markieren, wird dieses Feld in der resultierenden Abfrage sichtbar angezeigt. Wenn Sie ein Datenfeld nur verwenden, um eine Bedingung zu formulieren oder eine Berechnung durchzuführen, müssen Sie es nicht unbedingt anzeigen.

#### Kriterien

Legt ein erstes Kriterium fest, nach dem der Inhalt des Datenfeldes gefiltert werden soll.

#### oder

Sie können für jede Zeile ein zusätzliches Filterkriterium eingeben. Mehrere Kriterien in einer einzelnen Spalte werden als boolesches ODER interpretiert.

Sie können auch über das Kontextmenü der Zeilenüberschriften im unteren Bereich des Fensters Abfragedesig einen Filter basierend auf einer Funktion einfügen:

### Funktionen

Die verfügbaren Funktionen hängen von denen ab, die von der Datenbank-Engine bereitgestellt werden.

Wenn Sie mit der eingebetteten HSQL-Datenbank arbeiten, bietet Ihnen das Listenfeld in der Zeile Funktion folgende Möglichkeiten:

Option | SQL | Effekt
--- | --- | ---
Keine Funktion |  | Es wird keine Funktion ausgeführt.
Mittelwert | AVG | Berechnet das arithmetische Mittel eines Feldes.
Anzahl | COUNT | Bestimmt die Anzahl der Datensätze in der Tabelle. Leere Felder können entweder gezählt (a) oder ausgeschlossen (b) werden. a) COUNT(*): Die Übergabe eines Sternchens als Argument zählt alle Datensätze in der Tabelle. b) COUNT(Spalte): Die Übergabe eines Feldnamens als Argument zählt nur die Datensätze, in denen das angegebene Feld einen Wert enthält. Datensätze, bei denen das Feld einen Nullwert hat (das heißt keinen Text- oder Zahlenwert enthält), werden nicht gezählt.
Maximum | MAX | Bestimmt den höchsten Wert eines Datensatzes für dieses Feld.
Minimum | MIN | Bestimmt den niedrigsten Wert eines Datensatzes für dieses Feld.
Summe | SUM | Berechnet die Summe der Werte der Datensätze für die zugeordneten Felder.
Gruppierung | GROUP BY | Gruppiert Abfragedaten nach dem ausgewählten Feldnamen. Funktionen werden gemäß den angegebenen Gruppen ausgeführt. In SQL entspricht diese Option der GROUP BY-Klausel. Wenn ein Kriterium hinzugefügt wird, erscheint dieser Eintrag in der SQL HAVING-Unterklausel.

Sie können Funktionsaufrufe auch direkt in die SQL-Anweisung eingeben. Die Syntax lautet:

SELECT FUNCTION(Spalte) FROM Tabelle.

Beispielsweise lautet der Funktionsaufruf in SQL zum Berechnen einer Summe:

    SELECT SUM("Preis") FROM "Artikel".

Bis auf die Funktion Gruppierung heißen die obigen Funktionen alle Aggregatfunktionen. Das sind Funktionen, die Daten durch Berechnungen zu Ergebnissen zusammenfassen. Weitere Funktionen sind möglich, die nicht im Listenfeld aufgeführt sind. Diese hängen spezifisch vom verwendeten Datenbanksystem und von der vom aktuellen Base-Treiber für die Verbindung zum Datenbanksystem zur Verfügung gestellten Funktionalität ab.

Um andere Funktionen zu verwenden, die nicht im Listenfeld aufgeführt sind, müssen Sie sie manuelle unter Feld eingeben.

Für Funktionsaufrufe können Sie ebenfalls Aliasnamen zuweisen. Wenn die Abfragezeichenfolge nicht im Spaltenkopf anzeigen werden soll, geben Sie den gewünschten Namen unter Alias ein.

Im SQL-Statement lautet ein entsprechender Funktionsaufruf:

SELECT FUNCTION() AS Alias FROM Tabelle

Beispiel:

    SELECT COUNT(*) AS count FROM "Artikel"

Wenn Sie eine solche Funktion ausführen, können Sie keine weiteren Spalten für die Abfrage einfügen, außer als ein Argument in einer Funktion "Gruppierung".

Beispiele

Im folgenden Beispiel wird eine Abfrage über zwei Tabellen ausgeführt: eine Tabelle "Artikel" mit dem Feld "Artikel_Nr" und eine Tabelle "Lieferanten" mit dem Feld "Lieferanten_Name". Außerdem besitzen beide Tabellen ein gemeinsames Datenfeld "Lieferanten_Nr".

Um eine Abfrage zu erstellen, welche alle Lieferanten beinhaltet, die mehr als drei Artikel liefern, sind folgende Schritte nötig:

1. Die Tabelle "Artikel" und "Lieferanten" in den Abfrageentwurf einfügen.

2. Die Felder "Lieferanten_Nr" beider Tabellen verbinden, falls es nicht schon eine entsprechende Relation zwischen den Tabellen gibt.

3. Doppelt auf das Feld "Artikel_Nr" in der Tabelle "Artikel" klicken. Die Zeile Funktion über das Kontextmenü einblenden und die Funktion Anzahl auswählen.

4. Als Kriterium >3 eingeben und das Feld Sichtbar deaktivieren.

5. Das Feld "Lieferanten_Name" aus der Tabelle "Lieferanten" doppelt anklicken und die Funktion Gruppierung auswählen.

6. Die Abfrage ausführen.

Wenn in der Tabelle "Artikel" die Felder "Preis" (für den Einzelpreis eines Artikels) und "Lieferanten_Nr" (für den Lieferanten des Artikels) existieren, können Sie mit folgender Abfrage den Durchschnittspreis der Artikel erhalten, die ein Lieferant bereitstellt:

1. Die Tabelle "Artikel" in den Abfrageentwurf einfügen.

2. Die Felder "Preis" und "Lieferanten_Nr" doppelt anklicken.

3. Die Zeile Funktion einschalten und bei dem Feld "Preis" die Funktion Durchschnitt auswählen.

4. Auf Wunsch in der Zeile für den Aliasnamen "Durchschnitt" eintragen (ohne Anführungsstriche).

5. Bei dem Feld "Lieferanten_Nr" die Gruppierung auswählen.

6. Die Abfrage ausführen.

Folgende Kontextmenübefehle und Symbole sind vorhanden:

### Funktionen

Blendet eine Zeile für die Auswahl von Funktionen ein oder aus.

### Tabellenname

Blendet die Zeile für den Tabellennamen ein oder aus.

### Aliasname

Blendet die Zeile für den Aliasnamen ein oder aus.

### Eindeutige Werte

Ruft nur eindeutige Werte über die Abfrage ab. Dies gilt für mehrere Datensätze, welche mehrere wiederholt vorkommende Daten in den ausgewählten Feldern enthalten könnten. Ist der Befehl Eindeutige Werte aktiv, wird nur ein Datensatz in der Abfrage angezeigt (DISTINCT). Anderenfalls sind alle die Abfragekriterien erfüllenden Datensätze sichtbar (ALL).

Wenn beispielsweise der Name "Schmidt" mehrmals in der Adressendatenbank vorkommt, können Sie mithilfe des Befehls Eindeutige Werte festlegen, dass er in der Abfrage nur einmal erscheinen soll.

Bei Abfragen über mehrere Felder muss die Kombination der Werte aus allen Feldern eindeutig sein, damit das Ergebnis eines Datensatzes aufgenommen wird. Nehmen wir an, das Adressbuch enthält einmal "Schmidt in Hamburg" und zweimal "Schmidt in Mainz". Mit dem Befehl Eindeutige Werte liefert die Abfrage über die Felder "Nachname" und "Stadt" als Ergebnis einmal "Schmidt in Hamburg" und einmal "Schmidt in Mainz".

Dieser Befehl entspricht in SQL dem Prädikat DISTINCT.

### Limit

Erlaubt Ihnen, die maximale Anzahl an Datensätzen, welche die Anfrage zurückgibt, zu begrenzen.

Wenn ein Parameter Limit hinzugefügt wurde, werden nur so viele Zeilen angezeigt, wie festgelegt wurden. Anderenfalls werden alle Datensätze entsprechend der Abfragekriterien zu sehen sein.

### Formulieren von Filterbedingungen

Für das Formulieren von Filterbedingungen stehen Ihnen verschiedene Operatoren und Befehle zur Verfügung. Außer den relationalen Operatoren gibt es auch SQL-spezifische Befehle zum Abfragen der Inhalte von Datenbankfeldern. Wenn Sie diese Befehle in der LibreOffice-Syntax verwenden, konvertiert LibreOffice sie automatisch in die entsprechende SQL-Syntax mittels eines internen Parsers. Sie können SQL-Befehle auch direkt eingeben und den internen Parser so umgehen. Die folgenden Tabellen bieten eine Übersicht über die Operatoren und Befehle:

Operator | Bedeutung | Bedingung ist erfüllt, wenn …
--- | --- | ---
= | ist gleich | … der Feldinhalt mit dem angegebenen Ausdruck identisch ist. Der Operator = wird in den Abfragefeldern nicht angezeigt. Wenn Sie einen Wert ohne Operator eingeben, wird der Operator = automatisch angenommen.
<> | ist ungleich | … der Feldinhalt dem angegebenen Ausdruck nicht entspricht.
> | ist größer | … der Feldinhalt größer ist als der angegebene Ausdruck.
< | ist kleiner | … der Feldinhalt kleiner ist als der angegebene Ausdruck.
>= | ist größer oder gleich | … der Feldinhalt größer oder gleich dem angegebenen Ausdruck ist.
<= | ist kleiner oder gleich | … der Feldinhalt kleiner oder gleich dem angegebenen Ausdruck ist.

LibreOffice-Befehl | SQL-Befehl | Bedeutung | Bedingung ist erfüllt, wenn …
--- | --- | --- | ---
IS EMPTY | IS NULL | ist leer | … das Datenfeld leer ist. Bei Ja/Nein-Feldern mit drei möglichen Zuständen fragt dieser Befehl den unbestimmten Zustand ab (weder Ja noch Nein).
IS NOT EMPTY | IS NOT NULL | ist nicht leer | … das Datenfeld nicht leer ist. Beispielsweise enthält es Daten.
LIKE Platzhalter (*) für beliebig viele Zeichen Platzhalter (?) für genau ein Zeichen | LIKE Platzhalter (%) für beliebig viele Zeichen Platzhalter (_) für genau ein Zeichen | ist Bestandteil von | … das Datenfeld den angegebenen Ausdruck enthält. Platzhalter (*) geben dabei an, ob der Ausdruck x am Anfang (x*), am Ende (*x) oder innerhalb des Feldinhalts (*x*) vorkommt. Als Platzhalter können Sie in SQL-Abfragen das SQL-Zeichen % eingeben, in der LibreOffice Oberfläche die aus dem Dateisystem gewohnten Platzhalter (*). Der Platzhalter (*) oder (%) steht für beliebig viele Zeichen. Für genau ein Zeichen wird in der LibreOffice-Oberfläche das Fragezeichen (?) oder in SQL-Abfragen der Unterstrich (_) als Platzhalter verwendet.
NOT LIKE | NOT LIKE | ist nicht Bestandteil von | … das Datenfeld den angegebenen Ausdruck nicht enthält.
BETWEEN x AND y | BETWEEN x AND y | liegt im Intervall [x,y] | … das Datenfeld einen Wert enthält, der zwischen den beiden Werten x und y liegt.
NOT BETWEEN x AND y | NOT BETWEEN x AND y | liegt nicht im Intervall [x,y] | … das Datenfeld einen Wert enthält, der nicht zwischen den beiden Werten x und y liegt.
IN (a; b; c...) Achten Sie auf Semikolons als Trennzeichen in allen Wertelisten! | IN (a, b, c...) | enthält a, b, c … | … das Datenfeld einen der angegebenen Ausdrücke a, b, c, … enthält. Es können beliebig viele Ausdrücke angegeben werden, das Abfrageergebnis wird durch einen boolesche Operator ODER ermittelt. Die Ausdrücke a, b, c, … können sowohl Zahlen als auch Zeichen sein.
NOT IN (a; b; c...) | NOT IN (a, b, c...) | enthält nicht a, b, c … | … das Datenfeld einen der angegebenen Ausdrücke a, b, c, … nicht enthält.
= TRUE | = TRUE | hat den Wert True | … das Datenfeld den Wert True hat.
= FALSE | = FALSE | hat den Wert False | … das Datenfeld den Wert FALSCH enthält.

### Beispiele

='Frau.' | liefert Datenfelder mit dem Feldinhalt "Frau".
<'2001-01-10' | liefert Daten, die vor dem 10 Januar 2001 liegen
LIKE 'H?llo' | liefert Datensätze mit Feldinhalten wie "Hallo" und "Hello".
LIKE 'S*' | liefert Datensätze mit Feldinhalten wie "Sun".
BETWEEN 10 AND 20 | liefert Datensätze mit Feldinhalten zwischen den Werten 10 und 20. (Dabei kann es sich sowohl um Textfelder als auch um Zahlenfelder handeln.)
IN (1; 3; 5; 7) | liefert Datensätze mit den Werten 1, 3, 5, 7. Beinhaltet das Datenfeld beispielsweise eine Artikel-Nummer, können Sie eine Abfrage erstellen, die bestimmte Artikel mit der angegebenen Nummer liefert.
NOT IN ('Schmidt') | liefert Datensätze, die nicht "Schmidt" enthalten.

Like Abbruchsequenz: {escape 'Abbruchzeichen'}

Beispiel:

    SELECT * FROM Item WHERE ItemName LIKE 'The *%' {escape '*'}

Das Beispiel liefert alle Einträge, wo der Artikelname mit 'Der *' beginnt. Sie können somit auch nach Zeichen suchen, die sonst als Platzhalter interpretiert werden, wie *, ?, _, % oder der Punkt.

Outer Join Abbruchsequenz: {oj outer-join}

Beispiel:

    SELECT Article.* FROM {oj item LEFT OUTER JOIN orders ON item.no=orders.ANR}

### Abfrage von Textfeldern

Um den Inhalt eines Textfeldes abzufragen, müssen Sie den Ausdruck in einfache Anführungszeichen setzen. Die Unterscheidung zwischen Groß- und Kleinschreibung hängt von der verwendeten Datenbank ab. LIKE unterscheidet per Definition Groß- und Kleinschreibung (obwohl einige Datenbanken dies nicht strikt interpretieren).

### Abfrage von Datumsfeldern

Datumsfelder werden als #Date# dargestellt, um sie eindeutig als Daten zu identifizieren. Datum-, Zeit- und Datum-/Zeitkonstanten (Literale), die in Bedingungen verwendet werden, können entweder vom Typ SQL-Abbruchsyntax oder Standard-SQL2-Syntax sein.

Datentypelement | SQL-Abbruchsyntax #1 – kann veraltet sein | SQL-Abbruchsyntax #2 | SQL2 Syntax
--- | --- | --- | ---
Datum | {D'YYYY-MM-DD'} | {d 'YYYY-MM-DD'} | 'YYYY-MM-DD'
Zeit | {D'HH:MM:SS'} | {t 'HH:MI:SS[.SS]'} | 'HH:MI:SS[.SS]'
DatumZeit | {D'YYYY-MM-DD HH:MM:SS'} | {ts 'YYYY-MM-DD HH:MI:SS[.SS]'} | 'YYYY-MM-DD HH:MI:SS[.SS]'

Beispiel:

    SELECT {d '1999-12-31'} FROM world.years

Beispiel:

    SELECT * FROM mytable WHERE years='1999-12-31'

Alle Datumausdrücke (date literals) müssen in Hochkommata eingeschlossen werden. (Schlagen Sie für weitere Details die Referenz für die spezielle Datenbank und den verwendeten Verbinder nach.)

### Abfrage von Ja/Nein-Feldern

Um Ja/Nein-Felder abzufragen, verwenden Sie für dBase-Tabellen die folgende Syntax:

Zustand | Abfragekriterium | Beispiel
--- | --- | ---
Ja | bei dBase-Tabellen: ungleich zu jedem Wert | =1 liefert alle Datensätze, bei denen das Ja/Nein-Feld den Zustand "Ja" oder "an" hat (schwarze Markierung).
Nein | . | =0 liefert alle Datensätze, bei denen das Ja/Nein-Feld den Zustand "Nein" oder "aus" hat (keine Markierung).
Leer | IS NULL | IS NULL liefert alle Datensätze, bei denen das Ja/Nein-Feld keinen der beiden Zustände Ja oder Nein hat (graue Markierung).

Die Syntax ist von dem jeweiligen Datenbanksystem abhängig. Beachten Sie außerdem, dass Ja/Nein-Felder unterschiedlich definiert sein können (nur zwei anstelle von 3 Zuständen).

### Parameterabfragen

Parameterabfragen erlauben es dem Benutzer, während der Laufzeit Werte einzugeben. Diese Werte werden innerhalb der Kriterien zur Auswahl der anzuzeigenden Datensätze verwendet. Jeder dieser Werte hat einen damit verbundenen Parameternamen, welcher dazu verwendet wird, den Benutzer während der Abfrage zur Eingabe aufzufordern.

Parameternamen wird sowohl in der Entwurfs- als auch in der SQL-Ansicht einer Abfrage ein Doppelpunkt vorangestellt. Dies kann immer dort geschehen, wo ein Wert erscheinen kann. Falls derselbe Wert mehr als einmal in der Abfrage erscheint, wird derselbe Parametername verwendet.

Im einfachsten Fall, wenn der Benutzer einen Wert eingibt, der auf Gleichheit prüft, wird einfach der Parametername mit vorangestelltem Doppelpunkt in die Zeile Kriterium eingetragen. Im SQL-Modus sollte dies als WHERE "Field" = :Parametername eingegeben werden.

Parameternamen dürfen keines der Zeichen <Leerstelle>`!"$%^*()+={}[]@'~#<>?/, enthalten. Sie dürfen nicht gleich Feldnamen oder für SQL reservierten Wörter sein. Sie können aber gleich Aliasen sein.

Eine nützliche Konstruktion zum Auswählen von Datensätzen basierend auf Teilen des Inhalts eines Textfelds ist das Hinzufügen einer versteckten Spalte mit "LIKE '%' || :Teil_des_Feldes || '%'" als Kriterium. Dadurch werden Datensätze mit einer genauen Übereinstimmung ausgewählt. Wenn ein Test ohne Berücksichtigung der Groß-/Kleinschreibung erwünscht ist, besteht eine Lösung darin, LOWER (Feldname) als Feld und LIKE LOWER ( '%' || :Teil_des_Feldes || '%' ) als Kriterium zu verwenden. Beachten Sie, dass die Leerzeichen im Kriterium wichtig sind; Wenn sie weggelassen werden, interpretiert der SQL-Parser das gesamte Kriterium als zu vergleichende Zeichenfolge. Im SQL-Modus sollte dies als LOWER ( "Feldname" ) WIKE LOWER ( '%' || :Teil_des_Feldes || '%' ) eingegeben werden.

Parameterabfragen können als Datenquelle für Unterformulare verwendet werden, um es dem Benutzer zu erlauben, die angezeigten Datensätze einzuschränken.

### Parameter-Eingabe

Der Dialog Parametereingabe fordert den Benutzer zur Eingabe der Parameterwerte auf. Geben Sie einen Wert für jeden Abfrageparameter ein und bestätigen mit einem Klick auf OK oder durch Drücken von Eingabe.

Die eingegebenen Werte des Benutzers können jegliche Zeichen enthalten, die für SQL für das relevante Kriterium zulässig sind; dies kann vom zugrundeliegenden Datenbanksystem abhängen.

Der Benutzer kann die SQL-Platzhalter "%" (beliebige Zeichenfolge) oder "_" (beliebiges einzelne Zeichen) als Teil des Werts verwenden, um Datensätze mit komplexeren Kriterien abzufragen.

## SQL-Modus

SQL steht für "Structured Query Language" und beschreibt Anweisungen, um relationale Datenbanken abzufragen, zu aktualisieren und zu verwalten.

Da LibreOffice nicht die Eingabe des SQL-Codes verlangt, können Sie die meisten Abfragen auch ohne SQL-Kenntnisse durchführen. Während Sie eine Abfrage im Abfrageentwurf erstellen, setzt LibreOffice Ihre Anweisungen automatisch in die entsprechende SQL-Syntax um. Wenn Sie mit der Schaltfläche Entwurfsansicht ein/aus in die SQL-Ansicht wechseln, sehen Sie die SQL-Befehle einer bereits erstellten Abfrage.

Sie können Ihre Abfrage direkt in SQL-Code formulieren. Dabei ist jedoch zu beachten, dass die spezielle Syntax von Ihrem verwendeten Datenbanksystem abhängt.

Wenn Sie den SQL-Code von Hand eingeben, können Sie SQL-spezifische Abfragen anlegen, die nicht von der grafischen Oberfläche im Abfrageentwurf unterstützt werden. Diese Abfragen müssen im Native-SQL-Modus ausgeführt werden.

Indem Sie auf das Symbol SQL-Befehl direkt ausführen in der SQL-Ansicht klicken, haben Sie die Möglichkeit, eine Abfrage zu formulieren, die nicht von LibreOffice verarbeitet, sondern direkt an das Datenbankmodul gesendet wird.