Hmm, hier war ein überraschendes Ergebnis. Ich habe SQL Server hier nicht, also habe ich das in Postgres versucht. Offensichtlich gelten Haftungsausschlüsse: Dies führt nicht unbedingt zu den gleichen Ergebnissen, Ihre Laufleistung kann variieren, konsultieren Sie einen Arzt vor der Verwendung. Aber trotzdem ...
Ich schrieb eine einfache Abfrage auf zwei verschiedene Arten:
select *
from foo
where (select code from bar where bar.barid=foo.barid) between 'A' and 'B'
und
select *
from foo
where (select code from bar where bar.barid=foo.barid)>='A'
and (select code from bar where bar.barid=foo.barid)<='B'
Überraschenderweise mich, beide fast identische Laufzeiten hatten. Als ich einen EXPLAIN PLAN machte, gaben sie identische Ergebnisse. Insbesondere führte die erste Abfrage zweimal eine Suche nach einem Balken durch, einmal für den Test> = und erneut für den Test < =, genau wie die zweite Abfrage.
Fazit: In BETTEN ist BETWEEN in der Tat nur syntaktischer Zucker.
Persönlich verwende ich es regelmäßig, weil es für den Leser klarer ist, besonders wenn der getestete Wert ein Ausdruck ist. Herauszufinden, dass zwei komplexe Ausdrücke identisch sind, kann eine nicht-triviale Übung sein. Herauszufinden, dass zwei komplexe Ausdrücke identisch sein sollten, auch wenn sie nicht identisch sind, ist noch schwieriger.
Mir war nicht einmal bewusst, dass es einen Zwischenoperator gab. Wenn ich es zum ersten Mal sah, war es mir nicht 100% klar, ob zwischen inclusive oder exclusiv wäre. Ich habe richtig geraten, aber da die Antworten sagen, dass es keinen Leistungsunterschied gibt, würde ich bei der zweiten Version bleiben, um es klarer zu machen. Ich bin jedoch die Art von Person, die Klammern hinzufügen wird, wo sie nicht benötigt werden, nur um sicher zu sein, dass es kein Missverständnis gibt, wenn jemand anderes meinen Code liest. – drs9222