Der SQL BETWEEN Operator wird verwendet, um Daten auszuwählen, die innerhalb eines definierten Bereichs liegen. Mit der BETWEEN-Klausel kann man beispielsweise alle Einträge aus einer Datenbanktabelle abrufen, deren Werte zwischen zwei bestimmten Zahlen liegen. Dieser Bereich schließt die angegebenen Grenzwerte mit ein, also sind die beiden Endwerte in den Resultaten enthalten.

SELECT Spalte_A
FROM Tabelle_1 
WHERE Spalte_B BETWEEN Anfangswert AND Endwert; 
SQL BETWEEN

Einführung in SQL BETWEEN

Der SQL BETWEEN-Befehl ist eine äußerst nützliche Funktion, mit der wir Bereiche von Daten auswählen können. Stellen Dir vor, Du hast eine Datenbank mit Kundeninformationen, und Du möchtest alle Kunden herausfiltern, deren Alter zwischen 25 und 35 Jahren liegt. Hier kommt SQL BETWEEN ins Spiel!

Syntax von SQL BETWEEN

Die grundlegende Syntax von SQL BETWEEN lautet:

SELECT Spalte_A
FROM Tabelle_1 
WHERE Spalte_B BETWEEN Anfangswert AND Endwert;

# Beispiel
SELECT *
FROM Kunden
WHERE Alter BETWEEN 25 AND 35; 

Der SQL BETWEEN Operator wird nach der WHERE-Klausel gesetzt und bildet die Bedingung mit. Er überprüft, ob der Wert in der ausgewählten Spalte zwischen einem Wertebereich liegt. 

Dabei werden der Anfangs- und Endwert mitgezählt, d.h. in unserer Abfrage werden alle Kunden angezeigt die 25, 26, …, 34 und 35 Jahre alt sind.

Anwendung von SQL BETWEEN

Erstmal die Basics: SQL BETWEEN wird dazu genutzt, um Werte auszuwählen, die innerhalb eines bestimmten Bereichs liegen. Man könnte es sich wie einen Türsteher vorstellen, der nur Leute in den Club lässt, die zwischen 18 und 80 Jahren alt sind. Sorry Opa.

Praktischerweise lässt sich der BETWEEN Operator nicht nur für Zahlen, sondern auch für Buchstaben und Datums-/Zeitangaben anwenden.

Alternative zu SQL BETWEEN

Anstatt SQL BETWEEN zu nutzen, kann man dieselbe Logik auch mit den Bedingungsoperatoren „größer gleich (>=)“ und „kleiner gleich (<=)“ darstellen. Die Syntax sieht dann so aus:

… WHERE Spalte >= Anfangswert AND Spalte <= Endwert; 

Lassen wir das mal auf unserer fiktiven „Kunden“-Tabelle laufen. Wenn wir wieder alle Kunden zwischen 25 und 35 Jahren finden wollen, sähe das Ganze so aus:

SELECT * 
FROM Studenten 
WHERE Alter >= 25 AND Alter <= 35; 

Das liefert exakt dasselbe Ergebnis wie unsere BETWEEN-Anfrage. Gleichzeitig hat man eine weitere Methode kennengelernt, die in einigen Fällen sogar flexibler sein kann als BETWEEN. Warum? Weil man die Bedingungen unabhängig voneinander ändern kann, zum Beispiel um nur Werte zu finden, die größer als ein bestimmter Wert sind.

SQL BETWEEN bei Zahlen anwenden​

Ein Kunde in einem Onlineshop möchte nach allen T-Shirts filtern, die mindestens 10€ und höchstens 20€ kosten:

SELECT * 
FROM Produkte 
WHERE (Kategorie = 'T-Shirt') 
AND (Preis BETWEEN 10 AND 20); 

SQL BETWEEN bei Buchstaben anwenden

Um alle Länder der Welt aufzulisten, die die Anfangsbuchstaben A bis G haben, eignet sich die Abfrage:

SELECT * 
FROM Globus 
WHERE Land BETWEEN 'A' AND 'G'; 

SQL BETWEEN bei Datumswerten anwenden

Möchte ein Unternehmen alle Kunden herausfiltern, deren Geburtsjahr 1990 ist, muss zwischen dem 01.01.1990 und 31.12.1990 filtriert werden via:

SELECT * 
FROM Kunden 
WHERE Geburtsdatum BETWEEN '1990-01-01' AND '1990-12-31'; 

Wertebereiche ausschließen mit NOT BETWEEN

Mit NOT BETWEEN-Klausel in SQL kann man Werte ausschließen, die innerhalb eines bestimmten Bereichs liegen.

Angenommen, Du hast eine Tabelle namens Bestellungen mit einer Spalte namens Preis. Du möchtest alle Aufträge abrufen, deren Preis NICHT zwischen 20 und 50 liegt:

SELECT * 
FROM Bestellungen 
WHERE Preis NOT BETWEEN 20 AND 50; 

Es ist wichtig zu beachten, dass die Werte, die mit der NOT BETWEEN-Klausel ausgeschlossen werden, die Grenzwerte einschließen. Mit anderen Worten, im obigen Beispiel werden Aufträge, die genau 20 oder 50 kosten, auch ausgeschlossen.

Häufige Fehler und ihre Lösung

Fehler beim Umgang mit Datums- und Uhrzeitwerten

Wenn man mit Datumswerten arbeitet, sollte man immer im Hinterkopf behalten, dass SQL standardmäßig die Uhrzeit auf 00:00:00 setzt, wenn keine explizite Uhrzeit angegeben ist. Das bedeutet, wenn man einen Bereich mit SQL BETWEEN abfragt und nur das Datum angibt, bezieht sich das Enddatum auf den Beginn dieses Tages, also genau Mitternacht.

Nehmen wir als Beispiel an, man möchte alle Bestellungen abrufen, die zwischen dem 1. und dem 3. Juli 2023 getätigt wurden. Man könnte versucht sein, die Abfrage wie folgt zu schreiben:

SELECT * 
FROM Bestellungen 
WHERE Bestell_Datum BETWEEN '2023-07-01' AND '2023-07-03' 

Allerdings würde diese Abfrage alle Bestellungen ausschließen, die nach Mitternacht am 3. Juli getätigt wurden, da SQL das Enddatum als ‚2023-07-03 00:00:00‘ interpretiert. Um dieses Problem zu vermeiden und alle Bestellungen des gesamten 3. Juli einzubeziehen, sollte man das Enddatum auf den nächsten Tag setzen und die Uhrzeit explizit angeben:

SELECT * 
FROM Orders 
WHERE OrderDate BETWEEN '2023-07-01 00:00:00' AND '2023-07-03 23:59:59' 

Jetzt werden alle Bestellungen, die zwischen dem 1. und dem 3. Juli 2023 getätigt wurden, korrekt abgerufen. Es ist also immer wichtig, sich bewusst zu sein, wie SQL Datumswerte handhabt, um sicherzustellen, dass die Datenabfragen die gewünschten Ergebnisse liefern.

Falsche Reihenfolge der Werte

Wenn man die BETWEEN-Klausel verwendet, ist es wichtig, dass der kleinere Wert vor dem größeren Wert steht. Sonst erhält man nicht die gewünschten Ergebnisse. 

Wenn man z.B. „BETWEEN 50 AND 20“ schreibt, statt „BETWEEN 20 AND 50“, wird die Anfrage keine Ergebnisse liefern. Also immer darauf achten, dass die Werte in der richtigen Reihenfolge stehen!

Falsch behandelte Grenzwerte

Man sollte auch beachten, dass die BETWEEN-Klausel die Grenzwerte einschließt. Wenn man also ‚BETWEEN 20 AND 30‘ verwendet, werden sowohl 20 als auch 30 in den Ergebnissen enthalten sein.

Falls man nicht möchte, dass die Grenzwerte eingeschlossen werden, könnte man alternativ die Operatoren > und < verwenden. Zum Beispiel:

SELECT * 
FROM Kunden 
WHERE Alter > 25 AND Alter < 35; 

In diesem Fall wären die Studenten, die genau 19 oder genau 23 Jahre alt sind, nicht in den Ergebnissen enthalten. Man hat also mehr Kontrolle über die genaue Auswahl der Daten.

ARTIKEL TEILEN

Hast du Fragen? Hinterlasse einen Kommentar!