Logo Wissenstransfer Gerhard at CichnaDotCom

>> Wissensdatenbank / Datenmodellierung und Datenbanksysteme

Datenbankanfragen an genau eine Tabelle

Daten mit Bedingung abfragen (WHERE)

Mit einem einfachen SELECT-Statement umfasst die Ergebnismenge grundsätzlich alle Datensätze der angefragten Tabelle. Oft soll das Ergebnis jedoch auf eine ganz bestimmte Menge von Werten begrenzt werden. Interessieren beispielsweise nur die Kunden im Kundenbestand, die in der Stadt Hamburg wohnen, so soll das Ergebnis der Datenbankanfrage eben keine Kunden aus Berlin enthalten. Um die Ergebnismenge einzuschränken, muss das SELECT-Statement um das Schlüsselwort WHERE erweitert werden. Das folgende Beispiel erfragt alle Länder der Tabelle Country, beschränkt das Ergebnis jedoch auf Länder des Kontinents Amerika:

SQL-Statement
SELECT Name FROM Country WHERE Continent = 'America';

Ergebnis
Name
Bolivia
Brazil
Canada
Mexico
United States

Als Auswahlbedingung von WHERE wird der Wert des Attributs Continent auf Gleichheit mit der Zeichenkette America geprüft. Nur Datensätze, bei denen die Auswahlbedingung erfüllt ist, werden in das Ergbnis aufgenommen. Falls im SELECT-Statement eine Beschränkung mit WHERE eingesetzt wird, dann folgt WHERE immer dem Element FROM.

Im obigen Beispiel wurde ein einfacher Vergleich auf Wertgleichheit als Auswahlbedingung genutzt. Mit SQL können jedoch mehrere Bedingungen miteinander verknüpft werden und somit auch komplexe Abfragen erstellt werden.

Logische Operatoren in der Auswahlbedingung

Eine Klasse möglicher Operatoren, die zur Formulierung von Auswahlbedingungen genutzt werden können, sind die logischen Operatoren NOT, AND sowie OR. Ohne Klammerung werden diese in der genannten Reihenfolge ausgewertet. In folgender Tabelle wird die Verwendung von logischen Operatoren in Auswahlbedingungen exemplarisch dargestellt.

Beispiele für logische Operatoren
Operator Beschreibung Beispiel
SELECT Name FROM Country WHERE ...
NOT Negation einer Bedingung NOT Continent = 'America';
(Namen aller Länder, die nicht in Amerika liegen)
OR ODER-Verknüpfung von Bedingungen Continent = 'America' OR Continent = 'Africa';
(Namen aller Länder, die in Amerika oder Afrika liegen)
AND UND-Verknüpfung von Bedingungen Continent = 'Europe' AND Percentage = 100;
(Namen aller Länder, deren Grundfläche zu 100% in Europa liegen)

Logische Operatoren können auch kombiniert eingesetzt werden. Hierbei ist jedoch auf die richtige Klammersetzung zu achten. Folgende Beispiele verdeutlichen diesen Zusammenhang:

SQL-Statement
SELECT Name FROM Country WHERE Continent = 'Europe' AND NOT Percentage = 100;

Ergebnis: Ausgabe aller Länder in Europa, deren Grundfläche nicht zu 100% in Europa liegt.

SQL-Statement
SELECT Name FROM Country WHERE NOT (Continent = 'Europe' AND Percentage = 100);

Ergebnis: Ausgabe aller Länder, deren Grundfläche nicht zu 100% in Europa liegt.

SQL-Statement
SELECT Name FROM Country WHERE NOT Continent = 'Europe' AND Percentage = 100;

Ergebnis: Ausgabe aller Länder, die nicht in Europa liegen, deren Grundfläche jedoch zu 100% auf einem Kontinent liegt.

Vergleichsoperatoren in der Auswahlbedingung

Neben der Prüfung auf Gleichheit mit dem Operator "=" können in SQL auch weitere Vergleichsoperatoren zur Formulierung von Auswahlbedingungen eingesetzt werden. Typische Beispiele für solche Bedingungen ist die Anfrage nach allen Kunden, deren letzte Bestellung länger als drei Monate zurückliegt, oder die Anfrage nach allen Kunden, deren höchster Rechnungsbetrag größer als 1000 EUR ist. Aber auch Ähnlichkeiten, wie die Anfrage nach allen Kunden, deren Nachname mit "S" beginnt, können mit Vergleichsoperatoren gestellt werden.

Vergleichsoperatoren
Operator Beschreibung Beispiel
SELECT Name FROM Country WHERE ...
= Prüft auf Wertegleichheit Continent = 'America' oder Percentage = 100
<>,
auch: !=
Prüft auf Ungleichheit Continent != 'America' oder Percentage <> 100
>,
<
Größer als,
Kleiner als
Continent > 'America' oder Percentage < 100
>=,
<=
Größer gleich,
Kleiner gleich
Continent <= 'America' oder Percentage >= 100
BETWEEN Einschränkungen auf bestimmte Wertebereiche Population BETWEEN 6000000 AND 100000000
LIKE Einschränkungen auf bestimmte Muster von
Attributen:
_ steht für ein beliebiges einzelnes Zeichen
% steht für eine beliebige Folge von null oder mehr Zeichen
Code LIKE '_' (Einstelliger Wert)
Code LIKE 'C__' (Beginnt mit C und besteht aus 3 Zeichen)
Name LIKE '%A' (Wert endet mit A)
Name LIKE 'G%Y' (Wert beginnt mit G und endet mit Y)
IS NULL Kein Wert in Datenbank gespeichert Code IS NULL
IS NOT NULL Zusicherung, dass ein Wert in der Datenbank gespeichert ist Code IS NOT NULL
IN Einschränkung auf Werte einer gegebenen Wertemenge Continent IN ('America', 'Europe')

SQL-Statement
SELECT * FROM Country WHERE Continent = 'Africa' AND Name LIKE 'M%';

Ergebnis: Ausgabe aller Länder, die in Afrika liegen und deren Name mit dem Buchstaben M beginnt.

SQL-Statement
SELECT Name FROM Country WHERE Continent = 'Asia' AND Name BETWEEN 'C' AND 'I';

Ergebnis
Name
China
Egypt

Ausgabe aller Länder, die in Asien liegen und deren Name einen Anfangsbuchstaben zwischen C und I hat. So wird China mit in die Ergebnismenge aufgenommen, Indonesien und Indien jedoch nicht.

Hinweis
Die konkrete Implementierungen von BETWEEN unterscheidet sich je nach DBMS. In MySQL ist beispielsweise der 1. Parameter von BETWEEN Teil des Ergebnisses, der 2. jedoch nicht.

Ausgewählte Operatoren für Zeichenketten und Datumswerte

Folgende Operatoren für Zeichenketten und Datumswerte werden von den meisten DBMS unterstützt. Darüber hinaus werden von DBMS in der Regel eine Vielzahl weiterer Funktionen unterstützt, die teilweise sehr DBMS-spezifisch sind. Daher muss sich der Entwickler von SQL-Abfragen anhand der Dokumentation des eingesetzten DBMS über die tatsächlich verfügbaren Funktionen und deren tatsächlich implementiertes Verhalten informieren.

Datumsfunktionen
Datumsfunktionen sind Funktionen zur Ausgabe des aktuellen Datums oder der aktuellen Zeit, die entweder zur Filterung von Datensätzen oder zum Schreiben von Datums- und Zeitangaben verwendet werden. Die untenstehende Tabelle stellt mit CURRENT_DATE und CURRENT_TIMESTAMP exemplarisch zwei Datumsfunktionen vor.

Datumsfunktionen
Operator Beschreibung Beispiel
CURRENT_DATE Gibt das aktuelle Kalenderdatum zurück, oft in
der Form YYYY-MM-DD
(CURRENT_DATE - bestelldatum) >= 3;
Ermittelt alle Bestellungen, die 3 Tage oder länger
zurückliegen
CURRENT_TIMESTAMP Gibt einen aktuellen Zeitstempel zurück, oft in
der Form YYYY-MM-DD HH:MM:SS
SELECT CURRENT_TIMESTAMP;
Ermittelt Uhrzeit und Datum und gibt sie aus

In relationalen DBMS werden darüber hinaus in der Regel auch Konvertierungsfunktionen für Datums- und Zeitwerte zur Verfügung gestellt. Die konkreten Details dazu müssen in der Dokumentation des jeweils eingesetzten DBMS nachgelesen werden.

Zeichenkettenfunktionen
SQL stellt eine Reihe von Funktionen zur Bearbeitung von Zeichenketten zur Verfügung. Exemplarisch werden in der folgenden Tabelle Funktionen zum Verbinden von Zeichenketten vorgestellt.

Zeichenkettenfunktionen
Operator Beschreibung Beispiel
CONCAT(arg1, ..., argN) Verbindet die als Parameter übergebenen Werte zu
einer Zeichenkette
SELECT CONCAT(Name, ' ', Code) FROM Country;
CONCAT_WS(separator, arg1, ..., argN)
WS bedeutet "with separator", also
"mit Trennzeichen"
Verbindet die als Parameter übergebenen Werte zu
einer Zeichenkette und fügt zwischen 2 Werten immer
die als 1. Parameter übergebenen Zeichen als
Trennzeichen ein
SELECT CONCAT_WS(' ', Name, Code, Area, ';') FROM Country;

Die Verkettung von Zeichenketten wird beispielsweise zur Erzeugung von Ausgabetexten, wie Adressen, oder dem Export von Daten in strukturierten Text, wie XML, für technische Schnittstellen eingesetzt.