Heim > Datenbank > MySQL-Tutorial > Vorrang des SQL-AND/OR-Operators: Sind diese SQL-Anweisungen äquivalent?

Vorrang des SQL-AND/OR-Operators: Sind diese SQL-Anweisungen äquivalent?

Barbara Streisand
Freigeben: 2025-01-22 21:46:10
Original
514 Leute haben es durchsucht

SQL AND/OR Operator Precedence: Are These SQL Statements Equivalent?

Vorrang logischer SQL-Operatoren: Die Hierarchie von AND und OR verstehen

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>
Nach dem Login kopieren
<code class="language-sql">SELECT [...]
FROM [...]
WHERE some_col in (1,2,3) or some_col in (4,5) AND some_other_expr</code>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

Für diejenigen, die weiteres Referenzmaterial zur Priorität logischer Operatoren in SQL suchen, werden die folgenden Ressourcen empfohlen:

  • Vorrang des Microsoft Transact-SQL-Operators
  • Oracle MySQL 9-Operatorpriorität
  • Oracle 10g Bedingungspriorität
  • Vorrang des PostgreSQL-Operators
  • SQL wird von SQLite verstanden

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!

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