Heim > Datenbank > MySQL-Tutorial > Wie wirkt sich die Operatorpriorität auf die „OR'- und „AND'-Logik von MySQL in Abfragen aus?

Wie wirkt sich die Operatorpriorität auf die „OR'- und „AND'-Logik von MySQL in Abfragen aus?

Susan Sarandon
Freigeben: 2024-12-14 22:10:12
Original
532 Leute haben es durchsucht

How Does Operator Precedence Affect MySQL's `OR` and `AND` Logic in Queries?

MySQL OR/AND-Vorrang

In MySQL bestimmt die Reihenfolge der Operationen für logische Operatoren wie OR und AND die Interpretation komplexer Abfragen. In diesem Artikel werden die Prioritätsregeln und ihre Auswirkungen auf die Abfrageergebnisse erläutert.

Erklärung

Die MySQL-Dokumentation enthält eine umfassende Liste der Operatorprioritäten wie folgt:

INTERVAL
BINARY, COLLATE
!
- (unary minus), ~ (unary bit inversion)
^
*, /, DIV, %, MOD
-, +
<<, >>
&
|
= (comparison), <=, >=, >, <, <>, !=, IS, LIKE, REGEXP, IN
BETWEEN, CASE, WHEN, THEN, ELSE
NOT
&&, AND
XOR
||, OR
= (assignment), :=
Nach dem Login kopieren

Gemäß Für diese Vorranghierarchie würde die folgende Abfrage interpretiert werden als:

SELECT *
FROM tablename
WHERE
    display = 1
    OR (
        display = 2 AND content LIKE "%hello world%"
    )
    OR tags LIKE "%hello world%"
    OR title = "%hello world%"
Nach dem Login kopieren

Interpretation

Die obige Abfrage sucht nach Zeilen, in denen entweder:

  • Anzeige gleich 1 ist
  • Anzeige gleich 2 ist und Inhalt enthält „Hallo Welt“
  • Tags enthalten „Hallo Welt“
  • Titel enthält „Hallo Welt“

Die WHERE-Klausel wird in der folgenden Reihenfolge ausgewertet:

  1. Anzeige wird zuerst überprüft.
  2. Wenn Anzeige nicht 1 ist, dann die zweite Unterabfrage wird ausgewertet.
  3. Innerhalb der Unterabfrage wird die Anzeige auf Gleichheit mit 2 geprüft. Bei „true“ wird auf Inhalte geprüft „Hallo Welt.“
  4. Abschließend werden die verbleibenden Klauseln für Tags und Titel ausgewertet und mit einem ODER-Operator verknüpft.

Vorrangprobleme und Lösungen

An Um eine eindeutige Interpretation zu gewährleisten, wird die explizite Verwendung von Klammern empfohlen. Zum Beispiel:

SELECT *
FROM tablename
WHERE
    ((display = 1) OR (display = 2)) AND
    ((content LIKE "%hello world%") OR (tags LIKE "%hello world%") OR (title LIKE "%hello world%"))
Nach dem Login kopieren

Diese Abfrage stellt sicher, dass Zeilen abgerufen werden, wenn sie eine der folgenden Bedingungen erfüllen:

  • Anzeige entspricht 1 oder 2
  • Inhalt, Tags oder Titel enthalten „Hallo Welt“

Das obige ist der detaillierte Inhalt vonWie wirkt sich die Operatorpriorität auf die „OR'- und „AND'-Logik von MySQL in Abfragen aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage