In SQL sind die logischen Operatoren „AND“ und „OR“ die Bausteine zum Erstellen von bedingten Ausdrücken, die Daten basierend auf angegebenen Bedingungen filtern. Ihre Priorität oder die Reihenfolge, in der sie ausgewertet werden, ist jedoch entscheidend für die Bestimmung der Ergebnisse dieser Ausdrücke.
Frage:
Betrachten Sie die folgenden zwei SQL-Anweisungen:
<code class="language-sql">SELECT [...] FROM [...] WHERE some_col in (1,2,3,4,5) AND some_other_expr</code>
<code class="language-sql">SELECT [...] FROM [...] WHERE some_col in (1,2,3) or some_col in (4,5) AND some_other_expr</code>
Sind diese Aussagen gleichwertig? Gibt es ein Tool wie eine Wahrheitstabelle, das dabei helfen kann, ihre Gleichwertigkeit zu überprüfen?
Antwort:
Nein, diese beiden Aussagen sind nicht gleichwertig . „AND“ hat eine höhere Priorität als „OR“, was bedeutet, dass der Ausdruck some_col in (1,2,3,4,5) AND some_other_expr
zuerst ausgewertet wird und dann das Ergebnis dieser Auswertung auf den OR-Operator angewendet wird.
Um dies zu veranschaulichen, betrachten Sie das folgende Beispiel:
<code class="language-sql">Declare @x tinyInt = 1 Declare @y tinyInt = 0 Declare @z tinyInt = 0 Select Case When @x=1 OR @y=1 And @z=1 Then 'T' Else 'F' End -- 输出 T Select Case When (@x=1 OR @y=1) And @z=1 Then 'T' Else 'F' End -- 输出 F</code>
Die erste Anweisung wertet @x=1 OR @y=1 And @z=1
aus und das Ergebnis ist „T“, da der Ausdruck @y=1 And @z=1
„False“ zurückgibt. Der „OR“-Operator kombiniert dann dieses Ergebnis mit „@x=1“ (was „Wahr“ ist) und gibt letztendlich „T“ aus.
Die zweite Aussage bewertet (@x=1 OR @y=1) And @z=1
jedoch anders. Der „OR“-Operator kombiniert zunächst „@x=1“ und „@y=1“, die beide „True“ sind, und das Ergebnis ist „True“. Dieses „Wahr“-Ergebnis wird dann anhand von „@z=1“ (was „Falsch“ ist) ausgewertet, was zur endgültigen Ausgabe von „F“ führt.
Daher ist die Reihenfolge der Auswertung wichtig und Klammern können verwendet werden, um Vorrangregeln außer Kraft zu setzen. Um diese beiden Aussagen äquivalent zu machen, können Sie Klammern wie folgt hinzufügen:
<code class="language-sql">SELECT [...] FROM [...] WHERE (some_col in (1,2,3) or some_col in (4,5)) AND some_other_expr</code>
Für diejenigen, die weiteres Referenzmaterial zur Priorität logischer Operatoren in SQL suchen, werden die folgenden Ressourcen empfohlen:
Das obige ist der detaillierte Inhalt vonVorrang des SQL-AND/OR-Operators: Sind diese SQL-Anweisungen äquivalent?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!