Vorrang logischer SQL-Operatoren: AND und OR
Frage:
Betrachten Sie die folgende SQL-Anweisung:
SELECT [...] FROM [...] WHERE some_col IN (1,2,3,4,5) AND some_other_expr
und
SELECT [...] FROM [...] WHERE some_col IN (1,2,3) OR some_col IN (4,5) AND some_other_expr
Sind diese beiden Aussagen gleichwertig? Wenn sie nicht gleichwertig sind, wie priorisieren wir sie?
Antwort:
Priorität von AND- und OR-Operatoren
In SQL bestimmt die Operatorpriorität die Reihenfolge, in der logische Operatoren in der WHERE-Klausel ausgewertet werden. Die Rangfolge der AND- und OR-Operatoren ist wie folgt:
Das bedeutet, dass auch dann, wenn der UND-Operator rechts vom ODER-Operator erscheint, dieser zuerst ausgewertet wird.
Priorität auf Aussage anwenden
In der gegebenen Aussage:
Daher wird die zweite Aussage wie folgt bewertet:
WHERE (some_col IN (1,2,3)) OR (some_col IN (4,5) AND some_other_expr)
Überprüfung der Wahrheitstabelle
Hier ist eine Wahrheitstabelle, die die berechneten Unterschiede veranschaulicht:
some_col | some_other_expr | 语句 1 | 语句 2 |
---|---|---|---|
1 | 0 | False | True |
2 | 1 | True | True |
3 | 0 | False | True |
4 | 0 | False | False |
5 | 1 | False | True |
Wie wir sehen können, unterscheiden sich die Wahrheitswerte dieser beiden Aussagen in der ersten Zeile, was zeigt, dass sie nicht gleichwertig sind.
Verwenden Sie Klammern, um die Priorität zu überschreiben
Wenn Sie die Berechnungsreihenfolge ändern möchten, können Sie Klammern verwenden, um die Standardpriorität zu überschreiben. Um beispielsweise die zweite Aussage der ersten gleichzusetzen, würde sie wie folgt geschrieben werden:
WHERE (some_col IN (1,2,3) OR some_col IN (4,5)) AND some_other_expr
Das obige ist der detaillierte Inhalt vonHaben die SQL-Operatoren „AND' und „OR' unterschiedliche Prioritäten und wie wirkt sich dies auf die Abfrageergebnisse aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!