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-StatementSELECT 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.
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 | BeispielSELECT 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.
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 | BeispielSELECT 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.
|
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.