Welche Ausgabe bei between Operator (Datenbank)?

... komplette Frage anzeigen

2 Antworten

Zumindest in MySQL gilt:

 expr BETWEEN min AND max

If expr is greater than or equal to min and expr is less than or equal to maxBETWEEN returns 1, otherwise it returns 0. This is equivalent to the expression(min <= expr AND expr <= max)

http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_between

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von wotan38
28.05.2016, 11:17

Gilt für alle SQL-Datenbanken, da es sich um elementare Bestandteile des SQL-Standards handelt.

1

Ich habs ausprobiert. Bei meiner Datenbank bekomme ich 0 Treffer als Antwort. Ist auch logisch, denn

between a and b 

ist gleichbedeutend mit

>= a and <= b

und es ist offensichlich, dass kein Satz diese Bedingung erfüllen kann, wenn a größer ist als b.

Der between ist allerdings sehr schnell, besonders wenn das Feld indiziert ist. Die Datenbank kann zunächst direkt auf den ersten Treffer positionieren und dann die nachfolgenden sich in aufsteigender Reihenfolge befindlichen Sätze selektieren bis der letzte Treffer erreicht wird. Also kein Zugriff mehr als für das Ergebnis relevant ist. In Deinem Fall würde die Datenbank zunächst auf den Satz mit 20 als Anfangswert positionieren und feststellen, dass damit bereits das Ende der gültigen Vorgaben überschritten ist und abbrechen, weil 20 größer als der Endwert 10 ist.

Bei der zweiten Lösung muss die Datenbank zunächst zwei u.U. große Mengen ermitteln und dann daraus die Schnittmenge bilden, bei der dann ggf. nur ein paar Sätze übrigbleiben, also wegen vielleicht 10 Treffern möglicherweise Tausende von Sätzen durcharbeiten.

Grundsätzlich gilt: Die Datenbank überlegt nicht, was eine an sich sinnlose Formulierung bedeuten könnte, solange sie syntktisch korrekt und durchführbar ist. Sie macht einfach das, was in der Anweisung steht und bring das logisch korrekte Ergebnis dazu.

Antwort bewerten Vielen Dank für Deine Bewertung