2016-05-28 6 views
1

Ich frage mich, ob in einer SQL-Anfrage mit mehreren UND-Anweisung, jede AND ausgeführt wird oder werden sie nur ausgelöst, wenn die vorherige UND ist in Ordnung?SQL-Kette AND-Operator, alle ausgeführt?

In diesem Beispiel:

SELECT * FROM my_table WHEN a > 5 AND b < 10 

Wenn die Bedingung a> 5 nicht eingehalten wird, wird der Test b < 10 ausgelöst werden? Oder wie in JAVA wird es nur ausgelöst, wenn ein> 5 gültig ist?

Danke für Ihre Hilfe;)

Tschüss!

+0

IF 1/0 = 1 OR 1 = 1 SELECT 'True' AS Ergebnis ELSE SELECT 'False' AS Ergebnis IF 1 = 0 und 1/0 = 1 SELECT 'True' AS Ergebnis ELSE SELECT 'False' AS Ergebnis – artm

Antwort

2

Im Allgemeinen implementieren SQL-Engines "Kurzschlüsse", was bedeutet, dass die Ausführung von Bedingungen beendet wird, wenn der endgültige Wert bekannt ist.

Dies ist jedoch ziemlich unwichtig. Erstens können Sie sich nicht auf die Reihenfolge der Bewertung von Bedingungen verlassen. Sie wissen also nicht, was zuerst bewertet wird. Zweitens kann die Engine alternative Ausführungspfade verwenden (z. B. Indizes verwenden).

Und schließlich hat dieser Kurzschluss in der Regel eine minimale Auswirkung auf die Leistung. Das Lesen der Daten ist typischerweise viel wichtiger. Die einzige Ausnahme ist, wenn eine der Bedingungen sehr komplexe Funktionen verwendet. In diesem Fall würden Sie case oder Unterabfragen verwenden, um die Reihenfolge der Ausführung sicherzustellen.

+0

Danke für Ihre Antwort, das ist genau das, was ich gesucht habe :) –

Verwandte Themen