Es wird bestimmt, ob eine Zeile in einem Bereich liegt, der durch eine obere und untere Grenze angegeben wird.
{
zeile_1 [NOT] BETWEEN
zeile_2 AND
zeile_3 |
vektor_spalte [NOT] BETWEEN
ausdruck AND
ausdruck }
zeile ::= { (
ausdruck ,...) |
ausdruck |
unterabfrage_2 }
vektor_spalte ::= [
tabelle.] {
spalte[min..max] |
spalte(
min..max) }
zeile
Jeder ausdruck in zeile muss einfach sein. Die Zeile besteht aus den Werten von ausdruck in der angegebenen Reihenfolge. Ein einzelner ausdruck liefert also eine Zeile mit einer Spalte.
unterabfrage muss eine Tabelle liefern, deren Spalten alle einfach sind, und die höchstens eine Zeile hat. Diese Zeile ist der Operand. Ist die gelieferte Tabelle leer, so besteht der Operand aus einer Zeile, deren Spalten alle den Wert NULL haben.
Die drei Zeilen müssen dieselbe Anzahl von Spalten haben, und korrespondierende Spalten müssen verträgliche Datentypen haben (siehe Abschnitt „Verträglichkeit von Datentypen").
vektor_spalte
Eine multiple Spalte mit besonderen Regeln für das Ergebnis. Die Spaltenangabe darf keine Außenreferenz sein.
ausdruck
Die Werte müssen einfach sein, und ihre Datentypen müssen mit dem Datentyp der Ausprägungen von vektor_spalte verträglich sein (siehe Abschnitt „Verträglichkeit von Datentypen").
Ergebnis
zeile_1 BETWEEN zeile_2 AND zeile_3 ist identisch mit:
(zeile_1 >=
zeile_2) AND (zeile_1 <= zeile_3)
zeile_1 NOT BETWEEN zeile_2 AND zeile_3 ist identisch mit:
NOT (zeile_1 BETWEEN zeile_2 AND zeile_3)
vektor_spalte [NOT] BETWEEN ausdruck AND ausdruck
Die Bereichsabfrage wird für jede Ausprägung von vektor_spalte durchgeführt.
Die Einzelergebnisse werden mit OR verknüpft.
Beispiel
Wenn X eine multiple Spalte mit 3 Elementen ist, ist die Bereichsabfrage X[1..3] BETWEEN 13 AND 20
zu folgenden Bereichsabfragen äquivalent:
X[1] BETWEEN 13 AND 20 OR X[2] BETWEEN 13 AND 20 OR X[3] BETWEEN 13 AND 20
Beispiele
BETWEEN-Prädikat mit numerischem Bereich:
Aus der Tabelle ARTIKEL alle Artikel mit Artikelbezeichnung heraussuchen, deren Preis zwischen 0 und 10 Euro liegt.
SELECT artnr, artbez, preis FROM artikel WHERE preis BETWEEN 0.00 AND 10.00 artnr artbez preis 210 V-Nabe 5.00 220 H-Nabe 5.00 230 Felge 10.00 240 Speiche 1.00 500 Schraube M5 1.10 501 Mutter 0.75 |
BETWEEN-Prädikat mit einem Zeitintervall:
Aus der Tabelle AUFTRAG die Aufträge mit Auftragsnummer, Kundennummer, Auftragsdatum und Auftragstext heraussuchen, die im Dezember 2013 gestellt wurden:
SELECT anr, knr, atext, adatum FROM auftrag WHERE adatum BETWEEN DATE'2013-12-01' AND DATE'2013-12-31' anr knr atext adatum 210 106 Kunden-Verwaltung 2013-12-13 211 106 Datenbankentwurf KUNDEN 2013-12-30
BETWEEN-Prädikat mit Benutzervariable:
:MINIMUM ist eine Benutzervariable. Der Vergleich ist wahr, wenn das Produkt LSATZ*LANZ
(Preis pro Leistungseinheit mal Anzahl der Leistungseinheiten) außerhalb des angegebenen Bereichs liegt. Er ist falsch, wenn das Produkt innerhalb des Bereichs liegt. Das Ergebnis ist unbestimmt, wenn der Wert von LSATZ oder LANZ unbestimmt ist.
lsatz*lanz NOT BETWEEN :MINIMUM AND 2000