Tak i nie.
(poniżej odnosi się do SQL Server
wyłącznie)
Niektórzy operatorzy zwarcie, a niektóre nie. OR
CAN zwarcie, ale może nie w zależności od kolejności operacji wybranych przez silnik zapytania.
CASE
to (jak sądzę) 100% gwarancji na zwarcie.
Można także spróbować wymusić kolejność oceny z zagnieżdżonych nawiasów, jak:
IF ((X) OR Y)
Ale nie jestem pozytywne jest zawsze zgodny albo.
Kłopot z SQL w tym zakresie jest deklaratywny, a rzeczywistą logikę wykonuje silnik. W rzeczywistości może być skuteczniejsze sprawdzanie najpierw pod kątem przykładu od Y
, a następnie sprawdzanie pod kątem X
- jeśli na przykład Y
jest indeksowany, a X
wymaga skanowania tabeli.
dla odniesienia:
Z dokumentacji ANSI SQL from this answer:
Jeżeli pierwszeństwo nie jest określany przez formaty lub nawiasach, skuteczna ocena wyrażeń jest ogólnie wykonywane od lewej w prawo. Jednak jest zależna od implementacji czy wyrażenia są faktycznie oceniano lewej do prawej, szczególnie gdy operandy lub operatorzy mogą spowodować warunki, aby zostać podniesiona czy wyniki wyrażeń można określić bez całkowitego oceny wszystkich częściach wyrażenie.
sprawa nie jest w SQL, więc nie jestem pewien, jak to ma zastosowanie. (Jest w t-sql) –
@Billy - punkt dobry, dodałem zastrzeżenie na początku odpowiedzi. – JNK
+1 dla odniesienia do dokumentacji –