Inhalte

# Abfrageentwurf

Die Ansicht Abfrageentwurf erlaubt, 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 dem Computer anzuzeigen. Ansichten bieten dieselbe Funktionalität wie Abfragen, jedoch auf der Serverseite. Wenn sich die Datenbank auf einem Server befindet, der Ansichten unterstützt, können Ansichten verwendet werden, um die Datensätze auf dem Server zu filtern und so die Anzeigezeit zu beschleunigen.

Wird auf dem Register Tabellen eines Datenbankdokuments der Befehl Ansicht erstellen gewählt, erscheint das Fenster Ansichtsdesign, das dem hier beschriebenes Fenster Abfragedesign ähnelt.

Das Layout des Fensters „Abfrageentwurf“ wird mit einer erstellten Abfrage gespeichert, jedoch nicht mit einer erstellten Ansicht.

## Die Ansicht Entwurf

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

Im unteren Bereich der Entwurfsansicht wird die Abfrage definiert. Um eine Abfrage zu definieren, die einzuschließenden Datenbankfeldnamen und die Kriterien für die Anzeige der Felder festlegen. Um die Spalten im unteren Bereich der Entwurfsansicht neu anzuordnen, eine Spaltenüberschrift an eine neue Position ziehen oder die Spalte auswählen und [Befehl Strg+Pfeiltaste] drücken.

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

Um eine Abfrage zu testen, doppelt den Abfragenamen im Datenbankdokument anklicken. 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 der Abfrageentwurf erstmals geöffnet wird, ist ein Dialog zu sehen, in dem zunächst die Tabelle oder Abfrage ausgewählt werden muss, welche als Grundlage für die neue Abfrage dienen soll.

Felder doppelt anklicken, um diese der Abfrage hinzuzufügen. Ziehen-und-Ablegen verwenden, um Relationen zu definieren.

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

### Tabellen entfernen

Um die Tabelle aus der Entwurfsansicht zu entfernen, den oberen Rand des Tabellenfensters anklicken und das Kontextmenü öffnen. Den Befehl Löschen verwenden, um die Tabelle aus der Entwurfsansicht zu entfernen. Alternativ [Entf] drücken.

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

Die Tabellen können nach eigenen Wünschen skaliert und angeordnet werden. Um Tabellen zu verschieben, den oberen Rand an die gewünschte Position ziehen. Um die Anzeige der Tabelle zu vergrößern oder zu verkleinern, den Mauszeiger auf einem Rand oder einer Ecke positionieren und die Tabelle auf die gewünschte Größe ziehen.

## Tabellen-Relationen

Wenn Datenrelationen zwischen den Feldnamen zweier Tabelle bestehen, können diese Relationen für die Abfrage verwendet werden.

Existiert beispielsweise eine Tabelle für Artikel, die über eine Artikelnummer identifiziert werden, und eine Tabelle für Kunden, in der alle Artikelnummern der von einem Kunden bestellten Artikel erfasst sind, dann besteht eine Beziehung zwischen den beiden Datenfeldern "Artikelnummer". Soll nun eine Abfrage erstellt werden, die alle von einem Kunden bestellten Artikel auflistet, müssen Daten aus zwei Tabellen abgerufen werden. Dazu muss LibreOffice über die Relation informiert werden, die zwischen den Daten in den beiden Tabellen besteht.

Dazu in einer Tabelle einen Feldnamen anklicken (beispielsweise den Feldnamen "Artikelnummer" aus der Kundentabelle), die Maustaste gedrückt halten und den Feldnamen auf den Feldnamen der anderen Tabelle ziehen ("Artikelnummer" in der Artikeltabelle). Sobald die Maustaste losgelassen wird, 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.

Das Erstellen einer Abfrage, die auf mehreren miteinander verknüpften Tabellen basiert, ist nur möglich, wenn LibreOffice als Schnittstelle für eine relationale Datenbank verwendet wird.

In einer Abfrage kann nicht auf Tabellen aus verschiedenen Datenbanken zugegriffen werden. Abfragen, die mehrere Tabellen einbeziehen, können nur innerhalb einer einzigen Datenbank erstellt werden.

### Den Relationstyp festlegen

Die Verbindungslinie zweier verknüpfter Felder doppelt anklicken beziehungsweise Einfügen – Neue Relation… wählen, um im Dialog Relationen die Art der Relation festzulegen.

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

### Relationen löschen

Um eine Relation zwischen zwei Tabellen zu löschen, die Verbindungslinie anklicken und [Entf] drücken.

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

## Die Abfrage definieren

Bedingungen auswählen, 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

Zunächst alle Feldnamen der Tabellen auswählen, die der Abfrage hinzugefügt werden sollen. Dies kann entweder per Ziehen-und-Ablegen oder durch Doppelklick auf einen Feldnamen im Fenster „Tabellen“ erfolgen. Mittels Ziehen-und-Ablegen einen Feldnamen aus dem Fenster „Tabellen“ in den unteren Bereich des Fensters „Abfrageentwurf“ ziehen. Dabei kann entschieden werden, welche Spalte im Fenster „Abfrageentwurf“ das ausgewählte Feld erhält. Ein Feldname kann auch per Doppelklick ausgewählt werden. Dieser wird dann der nächsten freien Spalte im Fenster „Abfrageentwurf“ hinzugefügt.

### Feldnamen löschen

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

### Die Abfrage speichern

Zum Speichern der Abfrage in der Symbolleiste „Standard“ das Symbol Speichern anklicken. Ein Dialog öffnet sich, der zur Eingabe eines Namens für die Abfrage auffordert. Wenn die Datenbank Schemen unterstützt, kann auch ein Schemenname eingegeben werden.

#### Schema

Den Namen des Schemas eingeben, das der Abfrage oder Tabellenansicht zugewiesen ist.

#### Name der Abfrage oder Tabellenansicht

Den Namen der Abfrage oder Tabellenansicht eingeben.

### Daten filtern

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

#### Feld

Den Namen des Datenfelds eingeben, auf das in der Abfrage verwiesen wird. Alle in den Filteroptionszeilen vorgenommenen Einstellungen beziehen sich auf dieses Feld. Wird eine Zelle per Mausklick aktiviert, ist eine Pfeilschaltfläche zu sehen, mit der ein Feld ausgewählt werden kann. "Tabellenname.*" wählt alle Datenfelder aus, sodass 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 statt dieses Namens "ArtikelNr" in der Abfrage erscheinen soll, "ArtikelNr" als Alias eingeben.

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 diese Zelle per Mausklick aktiviert wird, erscheint ein Pfeil, der es ermöglicht, eine andere Tabelle für die aktuelle Abfrage auszuwählen.

#### Sortieren

Diese Zelle anklicken, um eine Sortieroption auszuwä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

Ist die Eigenschaft Sichtbar für ein Datenfeld aktiviert, wird dieses Feld in der resultierenden Abfrage sichtbar angezeigt. Wird ein Datenfeld nur verwendet, um eine Bedingung zu formulieren oder eine Berechnung durchzuführen, muss es nicht zwingend angezeigt werden.

#### Kriterien

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

#### oder

Für jede Zeile kann ein zusätzliches Filterkriterium eingegeben werden. Mehrere Kriterien in einer einzelnen Spalte werden als boolesches ODER interpretiert.

Über das Kontextmenü der Zeilenüberschriften im unteren Bereich des Fensters „Abfragedesign“ kann ein Filter basierend auf einer Funktion eingefügt werden:

### Funktionen

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

Wird mit der eingebetteten HSQL-Datenbank gearbeitet, bietet 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.

Funktionsaufrufe können auch direkt in die SQL-Anweisung eingegeben werden. 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 weitere Funktionen zu verwenden, die nicht im Listenfeld aufgeführt sind, müssen diese manuelle unter Feld eingegeben werden.

Funktionsaufrufen können auch Aliasnamen zugewiesen werden. Wenn die Abfragezeichenfolge nicht im Spaltenkopf anzeigen werden soll, den gewünschten Namen unter Alias eingeben.

Im SQL-Statement lautet ein entsprechender Funktionsaufruf:

SELECT FUNCTION() AS Alias FROM Tabelle

Beispiel:

    SELECT COUNT(*) AS count FROM "Artikel"

Wenn eine solche Funktion ausgeführt wird, können keine weiteren Spalten für die Abfrage eingefügt werden, 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 das Feld "Artikel_Nr" in der Tabelle "Artikel" anklicken. 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 die Felder "Preis" (für den Einzelpreis eines Artikels) und "Lieferanten_Nr" (für den Lieferanten des Artikels) in der Tabelle "Artikel" vorhanden sind, kann der Durchschnittspreis der von einem Lieferanten bereitgestellten Artikel mit folgender Abfrage ermittelt werden:

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, kann mithilfe des Befehls Eindeutige Werte festgelegt werden, dass der Name "Schmidt" in der Abfrage nur einmal erscheint.

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, die maximale Anzahl an Datensätzen zu begrenzen, welche die Anfrage zurückgibt.

Wird ein Parameter Limit hinzugefügt, werden nur so viele Zeilen wie festgelegt angezeigt. Anderenfalls werden alle Datensätze entsprechend der Abfragekriterien angezeigt.

### Formulieren von Filterbedingungen

Für das Formulieren von Filterbedingungen stehen 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 diese Befehle in der LibreOffice-Syntax verwendet werden, konvertiert LibreOffice sie automatisch in die entsprechende SQL-Syntax mittels eines internen Parsers. SQL-Befehle können auch direkt eingegeben und der interne Parser so umgangen werden. 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. Wird ein Wert ohne Operator eingegeben, wird automatisch der Operator = 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 in SQL-Abfragen das SQL-Zeichen % eingegeben werden, 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...) Hinweis: In allen Wertelisten werden Semikolons als Trennzeichen verwendet! | IN (a, b, c...) | enthält a, b, c … | … das Datenfeld einen der angegebenen Ausdrücke a, b, c, … enthält. Beliebig viele Ausdrücke können 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 | gibt Datensätze mit Feldinhalten zwischen den Werten 10 und 20 zurück. (Dabei kann es sich sowohl um Textfelder als auch um Zahlenfelder handeln.)
IN (1; 3; 5; 7) | gibt Datensätze mit den Werten 1, 3, 5, 7 zurück. Beinhaltet das Datenfeld beispielsweise eine Artikel-Nummer, kann eine Abfrage erstellt werden, 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, deren Artikelname mit 'Der *' beginnt. So kann auch nach Zeichen gesucht werden, 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, muss der Ausdruck in einfache Anführungszeichen gesetzt werden. 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 diese 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 Datumsausdrücke (date literals) müssen in Hochkommata eingeschlossen werden. (Weitere Details sind in der Referenz der jeweiligen Datenbank und des verwendeten Verbinders zu finden.)

### Abfrage von Ja/Nein-Feldern

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

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. Außerdem ist zu beachten, 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 überall dort verwendet werden, wo ein Wert stehen kann. Soll derselbe Wert mehrfach in der Abfrage vorkommen, 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 folgenden Zeichen enthalten: <Leerstelle>`!"$%^*()+={}[]@'~#<>?/,. Sie dürfen nicht mit Feldnamen oder für SQL reservierten Wörtern identisch sein. Sie dürfen aber mit Aliasnamen übereinstimmen.

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. Bitte beachten, 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. Einen Wert für jeden Abfrageparameter eingeben und mit einem Klick auf OK oder durch Drücken von [Eingabe] bestätigen.

Die eingegebenen Werte des Nutzers 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 Nutzer 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 die meisten Abfragen auch ohne SQL-Kenntnisse durchgeführt werden. Während eine Abfrage im Abfrageentwurf erstellt wird, setzt LibreOffice die Anweisungen automatisch in die entsprechende SQL-Syntax um. Wenn mit der Schaltfläche Entwurfsansicht ein/aus in die SQL-Ansicht gewechselt wird, sind die SQL-Befehle einer bereits erstellten Abfrage zu sehen.

Die Abfrage kann direkt in SQL-Code formuliert werden. Dabei ist jedoch zu beachten, dass die spezielle Syntax von dem verwendeten Datenbanksystem abhängt.

Wird der SQL-Code von Hand eingegeben, können SQL-spezifische Abfragen angelegt werden, die nicht von der grafischen Oberfläche im Abfrageentwurf unterstützt werden. Diese Abfragen müssen im nativen SQL-Modus ausgeführt werden.

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

Bitte unterstützen Sie uns!