Heim >Datenbank >MySQL-Tutorial >Haben die SQL-Operatoren „AND' und „OR' unterschiedliche Prioritäten und wie wirkt sich dies auf die Abfrageergebnisse aus?

Haben die SQL-Operatoren „AND' und „OR' unterschiedliche Prioritäten und wie wirkt sich dies auf die Abfrageergebnisse aus?

Linda Hamilton
Linda HamiltonOriginal
2025-01-22 21:57:13294Durchsuche

Do SQL's `AND` and `OR` Operators Have Different Precedence, and How Does This Affect Query Results?

Vorrang logischer SQL-Operatoren: AND und OR

Frage:

Betrachten Sie die folgende SQL-Anweisung:

<code class="language-sql">SELECT [...]
FROM [...]
WHERE some_col IN (1,2,3,4,5) AND some_other_expr</code>

und

<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 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:

  • Der UND-Operator hat eine höhere Priorität als der ODER-Operator.

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:

  • Die erste Anweisung verwendet nur den AND-Operator, daher ist die Priorität einfach.
  • Die zweite Anweisung verwendet eine Kombination aus ODER- und UND-Operatoren, wobei der ODER-Operator vor dem UND-Operator steht.

Daher wird die zweite Aussage wie folgt bewertet:

<code class="language-sql">WHERE (some_col IN (1,2,3)) OR (some_col IN (4,5) AND some_other_expr)</code>

Ü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:

<code class="language-sql">WHERE (some_col IN (1,2,3) OR some_col IN (4,5)) AND some_other_expr</code>

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn