17 Stimmen

Warum den Operator BETWEEN verwenden, wenn es auch ohne ihn geht?

Wie aus den beiden Abfragen hervorgeht, funktionieren beide gut. Dann bin ich verwirrt, warum wir überhaupt BETWEEN verwenden sollten, denn ich habe festgestellt, dass BETWEEN sich in verschiedenen Datenbanken unterschiedlich verhält, wie man in w3schule

SELECT *
FROM employees
WHERE salary BETWEEN 5000 AND 15000;

SELECT *
FROM employees
WHERE salary >= 5000
AND salary <= 15000;

2voto

sangam Punkte 1444

Ich stimme für @Quassnoi - Korrektheit ist ein großer Gewinn.

Ich finde Literale in der Regel nützlicher als die Syntaxsymbole wie <, <=, >, >=, != usw. Ja, wir brauchen (bessere, genauere) Ergebnisse. Und zumindest die Wahrscheinlichkeit, dass ich die Bedeutung der Symbole falsch interpretiere und umkehre, wird so vermieden. Wenn Sie <= verwenden und eine logisch falsche Ausgabe aus Ihrer Select-Abfrage erhalten, können Sie einige Zeit lang umherirren und nur zu dem Schluss kommen, dass Sie <= anstelle von >= geschrieben haben [visuelle Fehlinterpretation?]. Ich hoffe, ich habe mich klar ausgedrückt.

Und verkürzen wir nicht den Code (und machen ihn gleichzeitig übersichtlicher), was wiederum bedeutet, dass er übersichtlicher und leichter zu pflegen ist?

SELECT * 
FROM emplyees 
WHERE salary between 5000 AND 15000; 

SELECT * 
FROM emplyees 
WHERE salary >= 5000 AND salary <= 15000; 

Die erste Abfrage verwendet nur 10 Wörter, die zweite 12!

1voto

OMG Ponies Punkte 312816

Wenn die Endpunkte inklusive sind, dann BETWEEN ist die bevorzugte Syntax.

Weniger Verweise auf eine Spalte bedeuten weniger zu aktualisierende Stellen, wenn sich etwas ändert. Es ist das technische Prinzip, dass weniger Dinge bedeuten, dass weniger Dinge kaputt gehen können.

Das bedeutet auch, dass die Wahrscheinlichkeit geringer ist, dass jemand eine falsche Klammer für Dinge wie z. B. die Aufnahme eines OPs setzt. IE:

WHERE salary BETWEEN 5000 AND (15000
  OR ...)

...erhalten Sie einen Fehler, wenn Sie die Klammer um den AND-Teil einer BETWEEN-Anweisung setzen. Im Gegensatz dazu:

WHERE salary >= 5000
 AND (salary <= 15000
  OR ...)

...Sie würden erst dann wissen, dass ein Problem vorliegt, wenn jemand die von der Abfrage zurückgegebenen Daten überprüft.

0voto

Bill Karwin Punkte 493880

Semantisch haben die beiden Ausdrücke das gleiche Ergebnis.

Allerdings, BETWEEN ein einziges Prädikat ist, statt zweier Vergleichsprädikate, die mit AND . Je nach dem von Ihrem RDBMS bereitgestellten Optimierer kann ein einzelnes Prädikat einfacher zu optimieren sein als zwei Prädikate.

Obwohl ich erwarte, dass die meisten modernen RDBMS-Implementierungen sollte optimieren die beiden Ausdrücke identisch.

0voto

SF. Punkte 13028

Schlimmer, wenn es

  SELECT id FROM entries 
  WHERE 
     (SELECT COUNT(id) FROM anothertable WHERE something LEFT JOIN something ON...) 
     BETWEEN entries.max AND entries.min;

Schreiben Sie diese mit Ihrer Syntax um, ohne Zwischenspeicher zu verwenden.

-1voto

Dani Punkte 13900

Ich würde besser die 2. verwenden, da man immer weiß, ob es <= oder < ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X