Natascha: In welcher Reihenfolge erfolgen die Abfragen in einem SELECT Bef

Wenn eine WHERE Abfrage stattfindet, in der

WHERE a=1 AND b=1 AND c=1 AND d=1.

steht, wird dann wenn a=1 schon mal nicht zutrifft, trotzdem noch die weiteren WHERE Abfragen durchgegangen, oder bei der ersten falschen Abfrage abgebrochen.
Weiter noch, wenn in dem vorderem Bereich, also zwischen

SELECT. FROM

eine Berechnung steht, wird diese zuerst ausgeführt, oder nur wenn die anschließenden WHERE Abfragen zutreffen?

Danke für Eure Hilfe

Natascha

  1. Wenn eine WHERE Abfrage stattfindet, in der

    WHERE a=1 AND b=1 AND c=1 AND d=1.

    steht, wird dann wenn a=1 schon mal nicht zutrifft, trotzdem noch die weiteren WHERE Abfragen durchgegangen, oder bei der ersten falschen Abfrage abgebrochen.

    Es gibt nur eine WHERE-Klausel, hier können nicht mehrere durchlaufen werden.

    In der WHERE-Klausel ist eine Logische Verkettung enthalten, die binäre Arithmetik folgt.

    Natürlich wird man bei der Implementierung eine Sprache die Verknüpfung auflösen und wenn sich schon am Anfang ergibt, dass sie niemals zutreffen kann, kann man sie gleich als "falsch" werten.

    Wenn also bei einem AND-Gatter der erste Eingang bereits "falsch" ist, braucht man den zweiten garnicht erst zu prüfen. Bei einer OR-Verknüpfung hingegen ist das etwas anderes.

    Bei XOR hingegen muss ich den zweiten Teil nicht überprüfen, wenn der erste bereits zutrifft.

    Weiter noch, wenn in dem vorderem Bereich, also zwischen

    SELECT. FROM

    eine Berechnung steht, wird diese zuerst ausgeführt, oder nur wenn die anschließenden WHERE Abfragen zutreffen?

    Wenn die Bedingung nicht zutrifft, gibt es keine Ergebnismenge - es wäre absurd, wenn jemand eine SQL-Dialekt so implementiet, dass er dann trotzdem performancelastig irgendwelche Berechnungen durchführt.

    1. Bei XOR hingegen muss ich den zweiten Teil nicht überprüfen, wenn der erste bereits zutrifft.

      FAIL:
      Bei XOR muss selbstverständlich der zweite geprüft werden, egal wie der erste Eintrag aussieht.

  2. Tach!

    Wenn eine WHERE Abfrage stattfindet, in der
    WHERE a=1 AND b=1 AND c=1 AND d=1.
    steht, wird dann wenn a=1 schon mal nicht zutrifft, trotzdem noch die weiteren WHERE Abfragen durchgegangen, oder bei der ersten falschen Abfrage abgebrochen.

    Diese Frage beantwortet dir die Dokumentation des von dir nicht genannten Systems. Üblicherweise findet ein Kurzschlussverfahren statt. Wenn das Ergebnis sich durch weitere Bedingungen nicht mehr ändern kann, werden diese Bedingungen nicht mehr ausgewertet und eventuelle Funktionsaufrufe in diesen nicht ausgeführt.

    Weiter noch, wenn in dem vorderem Bereich, also zwischen
    SELECT. FROM
    eine Berechnung steht, wird diese zuerst ausgeführt, oder nur wenn die anschließenden WHERE Abfragen zutreffen?

    Die Reihenfolge der Klauseln müsste sein: FROM (inkl. JOIN), WHERE, SELECT, GROUP BY, HAVING, ORDER BY (, LIMIT). Ab GROUP BY kann man auf die unter SELECT vergebenen Aliase zugreifen, in WHERE geht das nicht. Die Datenmenge wird zunächst anhand der WHERE-Bedingung eingeschränkt, bevor Ausdrücke in SELECT berechnet werden.

    dedlfix.