Inhalte
Index 🔎︎

# Abfrageentwurf

In der Ansicht Abfrageentwurf können Sie neue Datenbankabfragen erstellen und vorhandene bearbeiten.

So greifen Sie auf diesen Befehl zu:

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

Die meisten Datenbanken verwenden Abfragen, um Datensätze aus Datenbanktabellen auf dem Computer gefiltert und sortiert anzuzeigen. Sichten bieten die gleiche Funktionalität wie Abfragen, sind jedoch serverseitig angeordnet. Wenn Ihre Datenbank auf einem Server installiert ist, der Sichten unterstützt, können Sie mit diesen Sichten Datensätze auf dem Server filtern, um die zur Anzeige benötigte Zeit zu verkürzen.

Wenn Sie im Aufgabenfensters einer Datenbank im Bereich Tabellen den Befehl Ansicht erstellen wählen, wird das Fenster Ansichtsentwurf geöffnet, das dem hier beschriebenen Fenster Abfrageentwurf entspricht.

Das Aussehen der Abfrage-Entwurfsansicht wird mit der erzeugten Abfrage gespeichert. Sie kann aber nicht mit der erzeugten Ansicht gespeichert werden.

## Die Entwurfsansicht

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

Im unteren Fensterbereich der Entwurfsansicht definieren Sie die Abfrage. Zur Definition einer Abfrage geben Sie die Feldnamen der in der Datenbank zu berücksichtigenden Felder sowie die Kriterien zur Anzeige der Felder an. Die Spalten im unteren Fensterbereich der Entwurfsansicht lassen sich durch Ziehen der Spaltenköpfe oder Auswählen der Spalten und Drücken von Befehl Strg+Pfeiltaste umordnen.

Am oberen Rand des Fensters Abfrageentwurfsansicht werden die Symbole der Symbolleisten Abfrageentwurf und Design angezeigt.

Zum Testen einer Abfrage klicken Sie auf das Symbol Abfrage ausführen in der Symbolleiste Abfrageentwurf. Das Abfrageergebnis wird in einer der Datenquellenansicht ähnlichen Tabelle angezeigt. Hinweis: Die Anzeige dieser Tabelle ist nur temporär.

### Tasten in der Ansicht Abfrageentwurf

Schlüssel | Funktion
F4 | Vorschau
F5 | Abfrage ausführen
F7 | Tabelle oder Abfrage hinzufügen

## Durchsuchen

Wenn Sie den Abfrageentwurf zum ersten Mal öffnen, sehen Sie einen Dialog, in dem Sie zuerst die Tabelle oder Abfrage auswählen müssen, welche die Basis für Ihre neue Abfrage wird.

Doppelklicken Sie auf Felder, um sie der Abfrage hinzuzufügen. Mit Ziehen-und-Ablegen definieren Sie Relationen.

Während Sie eine Abfrage erstellen, können Sie die ausgewählten Tabellen nicht mehr verändern.

### Tabellen entfernen

Um eine Tabelle aus der Entwurfsansicht zu entfernen, klicken Sie auf den oberen Rand des Tabellenfensters und rufen Sie dann das Kontextmenü auf. Mit dem Befehl Löschen wird die Tabelle aus der Entwurfsansicht entfernt. Alternativ können Sie auch die Taste Entfernen betätigen.

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

Sie können die Tabellen nach Ihren Wünschen anordnen und sie in der Größe verändern. Um eine Tabelle zu verschieben, fassen Sie sie mit der Maus am oberen Rand und ziehen Sie sie in die gewünschte Position. Um sie in der Darstellung zu vergrößern oder zu verkleinern, ziehen Sie den Rand oder eine Ecke.

## Beziehungen zwischen Tabellen

Wenn es Datenbeziehungen zwischen einem Datenfeld in einer Tabelle zu einem Datenfeld in einer anderen Tabelle gibt, dann können Sie diese Beziehungen für Ihre Abfrage nutzen.

Nehmen wir beispielsweise an, Sie haben ein Tabellendokument für Artikel, in dem jeder Artikel durch eine Artikelnummer gekennzeichnet ist, und ein Tabellendokument für Kunden, in dem alle von den Kunden bestellten Artikel anhand der Artikelnummern verzeichnet sind. In diesem Fall besteht eine Beziehung zwischen den beiden Datenfeldern "Artikelnummer". Um nun eine Abfrage zu erstellen, die alle von einem Kunden bestellten Artikel ausgibt, müssen Sie Daten aus zwei Tabellendokumenten abrufen. Dafür müssen Sie LibreOffice die Beziehung zwischen den Daten in den beiden Tabellendokumenten aufzeigen.

Klicken Sie dazu ein Datenfeld einer Tabelle an (z. B. das Datenfeld "Artikel-Nummer" aus der Kunden-Tabelle) und ziehen Sie dann bei gedrückt gehaltener Maustaste auf das Datenfeld der anderen Tabelle ("Artikel-Nummer" aus der Artikel-Tabelle). Wenn Sie nun die Maustaste loslassen, sehen Sie eine Linie, die die beiden Felder in den beiden Tabellenfenstern verbindet. In der resultierenden SQL-Abfrage wird die entsprechende Bedingung eingetragen, dass der Inhalt beider Datenfelder gleich sein muss.

Das Erstellen einer Abfrage, der mehrere in Beziehung zueinander stehende Tabellen zugrunde liegen, ist nur dann möglich, wenn Sie LibreOffice als Oberfläche für eine relationale Datenbank verwenden.

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

### Festlegen des Verbindungstyps

Wenn Sie auf die Verbindungslinie zwischen zwei verknüpften Feldern doppelklicken oder Einfügen - Neue Relation... wählen, können Sie im Dialog Verbundeigenschaften (Relationen) den gewünschten Verbindungstyp angeben.

Alternativ drücken Sie die Tabulatortaste, bis die Verbindungslinie ausgewählt ist. Dann drücken Sie Umschalt+F10, um das Kontextmenü anzuzeigen und dort den Befehl Bearbeiten auszuwählen. Einige Datenbanken unterstützen nur eine Teilmenge der möglichen Verbindungsarten.

### Beziehungen löschen

Um eine Beziehung zwischen zwei Tabellen zu löschen, klicken Sie die Verbindungslinie mit der Maus an und drücken Sie dann die Taste Entf.

Sie können auch die entsprechenden Einträge aus der Liste beteiligte Felder im Dialog Verbundeigenschaften löschen. Oder drücken Sie die Tabulatortaste, bis die Verbindungslinie hervorgehoben wird, drücken Sie Umschalt+F10 zum Öffnen des Kontextmenüs und wählen Sie den Befehl Löschen.

## Definieren der Abfrage

Wählen Sie die Bedingungen zum Definieren der Abfrage. Jede Spalte der Entwurfstabelle nimmt ein Datenfeld für die Abfrage auf. Die Bedingungen in einer Zeile werden durch ein logisches UND verknüpft.

### Festlegen von Feldnamen

Wählen Sie zunächst in den Tabellen alle Feldnamen aus, die in der Abfrage berücksichtigt werden sollen. Dies geschieht entweder mittels Ziehen-und-Ablegen oder durch Doppelklicken auf einen Feldnamen im Tabellenfenster. Beim Ziehen-und-Ablegen ziehen Sie einen Feldnamen mit der Maus aus dem Tabellenfenster in den unteren Fensterbereich des Abfrageentwurfs. Dabei können Sie entscheiden, in welche Spalte im Abfrageentwurf das Feld eingefügt werden soll. Sie können auch einen Feldnamen auswählen, indem Sie darauf doppelklicken. Er wird dann in die nächste freie Spalte im Abfrageentwurf eingefügt.

### Datenfelder löschen

Um ein Datenfeld aus der Abfrage zu entfernen, klicken Sie mit der rechten Maustaste in den Spaltenkopf des Feldes und rufen Sie dann den Befehl Löschen im Kontextmenü der Spalte auf.

### Speichern der Abfrage

Mit dem Symbol Speichern in der Symbolleiste Standard speichern Sie die Abfrage. Sie sehen einen Dialog, der Sie zum Eingeben eines Namens für die Abfrage auffordert. Wenn die Datenbank Schemata unterstützt, können Sie auch einen Schemanamen eingeben:

#### Schema

Geben Sie den Namen des Schemas ein, dem die Abfrage/Tabellenansicht zugeordnet wird.

#### Name der Abfrage/Tabellenansicht

Geben Sie den Namen der Abfrage/Tabellenansicht ein.

### Filterung der Daten

Zum Filtern der Daten für die Abfrage geben Sie im unteren Fensterbereich der Entwurfsansicht die gewünschten Kriterien ein. Die folgenden Optionen stehen zur Verfügung:

#### Feld

Geben Sie den Namen des Datenfelds ein, auf das sich die Abfrage bezieht. Alle Einstellungen in der Zeilen Filteroptionen gelten für dieses Feld. Wenn Sie hier eine Zelle per Mausklick aktivieren, wird eine Pfeilschaltfläche eingeblendet, die zum Auswählen von Feldern dient. Mit der Option "Tabellenname.*" wählen Sie alle Datenfelder aus, sodass die eingegebenen Kriterien auf alle Tabellenfelder angewendet werden.

#### Alias

Dient zur Angabe eines Aliasnamens. Der Aliasname wird in einer Abfrage anstelle des Feldnamens angezeigt. Diese Funktion ermöglicht den Einsatz benutzerdefinierter Spaltenbeschriftungen. Heißt das Datenfeld in der Tabelle beispielsweise Teilenr. und Sie möchten, dass in der Abfrage stattdessen der Name Teilenummer erscheint, so geben Sie Teilenummer als den Aliasnamen ein.

In einer SQL-Anweisung werden Aliasnamen wie folgt festgelegt:

SELECT column AS alias FROM table.

Beispiel:

SELECT "ArtikelNr" AS "Artikel-Nummer" FROM "Artikel"

#### Tabelle

Hier ist die zugehörige Datenbanktabelle des ausgewählten Datenfelds angegeben. Wenn Sie die Zelle per Mausklick aktivieren, wird eine Pfeilschaltfläche eingeblendet, die zur Auswahl einer anderen Tabelle der aktuellen Abfrage dient.

#### Sortierung

Wenn Sie diese Zelle anklicken, können Sie eine Sortieroptionen wählen: aufsteigend, absteigend oder unsortiert. Text-Felder werden alphabetisch sortiert, numerische Felder numerisch. Für die meisten Datenbanken können die Administratoren die Sortieroptionen auf der Datenbankebene setzen.

#### Sichtbar

Wählen Sie die Eigenschaft Sichtbar für ein Datenfeld, wird dieses Feld in der resultierenden Abfrage sichtbar dargestellt. Um ein Datenfeld nur zur Formulierung einer Bedingung oder für eine Berechnung zu nutzen, brauchen Sie es für die Abfrage nicht unbedingt anzuzeigen.

#### Kriterien

Hier legen Sie ein erstes Kriterium fest, nach dem der Inhalt des Datenfeldes gefiltert werden soll.

#### oder

Hier können Sie in jede Zeile je ein weiteres Filterkriterium eingeben. Mehrere Kriterien in einer einzelnen Spalte werden als ODER-Verknüpfung interpretiert.

Darüber hinaus können Sie über das Kontextmenü der Zeilenköpfe im unteren Bereich des Fensters Abfrageentwurf noch einen auf einer Funktion basierenden Filter einfügen:

### Funktionen

Die hier verfügbaren Funktionen hängen dabei von den unterschiedlichen Möglichkeiten des von Ihnen verwendeten Datenbanksystems ab.

Falls Sie mit der eingebetteten HSQL-Datenbank arbeiten, bietet Ihnen das Listenfeld in der Zeile Funktion die folgenden Optionen:

Option | SQL | Auswirkung
keine Funktion |  | Es wird keine Funktion ausgeführt.
Durchschnitt | AVG | Berechnet das arithmetische Mittel eines Feldes.
Anzahl | COUNT | Bestimmt die Anzahl der Datensätze in der Tabelle. Dabei können leere Felder entweder gezählt (a) oder ausgeschlossen (b) werden. a) COUNT(*): Wenn Sie als Argument ein Sternchen übergeben, werden alle Datensätze der Tabelle gezählt. b) COUNT(Spalte): Wenn Sie einen Feldnamen als Argument übergeben, werden nur die Datensätze gezählt, in denen das angegebene Feld einen Wert enthält. Datensätze, in denen das Feld einen Nullwert hat (das heißt keinen Text- oder Zahlenwert enthält), werden nicht gezählt.
Maximum | MAX | Ermittelt den höchsten Wert eines Datensatzes für das Feld.
Minimum | MIN | Ermittelt den niedrigsten Wert eines Datensatzes für das Feld.
Summe | SUM | Berechnet die Summe der Werte des Datensatzes für das zugehörige Feld.
Gruppierung | GROUP BY | Gruppiert Abfragedaten nach dem ausgewählten Feldnamen. Die Funktionen werden für die angegebenen Gruppen ausgeführt. Diese Option entspricht in SQL der Klausel GROUP BY. Wenn Sie ein Kriterium hinzufügen, erscheint dieser Eintrag in SQL nach dem Unterabschnitt HAVING.

Es besteht auch die Möglichkeit, Funktionsaufrufe direkt in den SQL-Ausdruck einzugeben. Die Syntax lautet:

SELECT FUNCTION(column) FROM table.

Im SQL lautet der Funktionsaufruf zur Summenberechnung beispielsweise:

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

Bis auf die Funktion Gruppierung heißen die obigen Funktionen alle Aggregat-Funktionen. 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 benutzen, 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 Abfragezeichenkette 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 table

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, die 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. Klicken Sie doppelt auf das Feld "Artikel_Nr" in der Tabelle "Artikel". Blenden Sie die Zeile Funktion über das Kontextmenü ein und wählen Sie die Funktion Anzahl aus.

4. Als Kriterium >3 eingeben und das Sichtbar-Feld ausschalten.

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

6. Führen Sie die Abfrage aus.

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. Führen Sie die Abfrage aus.

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 "Schmitt" mehrmals in der Adressendatenbank vorkommt, können Sie mithilfe des Befehls Eindeutige Werte angeben, 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 "Schmitt in Hamburg" und zweimal "Schmitt in Mainz". Mit dem Befehl Eindeutige Werte liefert die Abfrage über die Felder "Nachname" und "Stadt" als Ergebnis einmal "Schmitt in Hamburg" und einmal "Schmitt 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 Sie nur so viele Zeilen angezeigt bekommen, wie Sie festgelegt haben. Andernfalls werden Sie alle Datensätze entsprechend der Abfragekriterien sehen.

### 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 einen Überblick ü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. Geben Sie einen Wert ohne Operator ein, 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 hierbei 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 dient in der LibreOffice Oberfläche das Fragezeichen (?) oder in SQL-Abfragen der Unterstrich (_) als Platzhalter.
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

='Ms.' | liefert Datenfelder mit dem Feldinhalt "Frau".
<'2001-01-10' | liefert Daten, die vor dem 10 Januar 2001 liegen
LIKE 'g?ve' | 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 ('Smith') | liefert Datensätze, die nicht "Müller" enthalten.

Like Escape Sequence: {escape 'escape-character'}

Beispiel: select * from Artikel where Artikelname like 'Der *%' {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 Escape Sequence: {oj outer-join}

Beispiel: select Artikel.* from {oj Artikel LEFT OUTER JOIN Bestellungen ON Artikel.Nr=Bestellungen.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

Datenfelder 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 Verbinder, die Sie benutzen, 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 benutzt 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 benutzt.

Im einfachsten Fall, bei dem der Benutzer einen Wert eingibt, der auf Gleichheit überprüft werden soll, wird der Parametername mit seinem vorangestellten Doppelpunkten in der Kriteriumszeile eingeben. Im SQL-Modus sollte dies als WHERE "Feld" = :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, um Datensätze basierend auf Inhaltsteilen eines Textfelds auszuwählen, besteht darin, eine versteckte Spalte mit "LIKE '%' || :Teil_des_Felds || '%'" als Kriterium hinzuzufügen. Dies wird Datensätze mit einem exakten Treffer auswählen. Falls ein Test ohne Berücksichtigung der Groß- und Kleinschreibung benötigt wird, besteht eine Lösung darin LOWER (Feldname) als Feld und LIKE LOWER ( '%' || :Teil_des_Felds || '%' ) als Kriterium zu benutzen. Beachten Sie, dass die Leerzeichen im Kriterium wichtig sind; falls sie weggelassen werden, interpretiert der SQL-Parser das gesamte Kriterium als eine passende Zeichenkette. Im SQL-Modus sollte dies als LOWER ( "Feldname" ) LIKE LOWER ( '%' || :Teil_des_Felds || '%' ) 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 der Eingabetaste.

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 Zeichenkette) oder "_" (beliebiges einzelne Zeichen) als Teil des Werts benutzen, 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.