Probleme bei der Ausführungsreihenfolge von AND und OR in SQL-Anweisungen

Probleme bei der Ausführungsreihenfolge von AND und OR in SQL-Anweisungen

Frage

Beim Schreiben von Datenbank-SQL ist mir gestern ein Problem begegnet. Die Ursache des Problems liegt in der Ausführungspriorität der Schlüsselwörter AND und OR in SQL-Anweisungen. Lassen Sie uns dieses Problem testen.

Szenario

1. Es gibt eine Studententabelle „Student“, die Tabellenfelder umfassen ID (Primärschlüssel des Benutzers), Name (Benutzername), Grade (Klasse), Class (Klasse), Sex (Geschlecht). wie folgt:

Tabellenstruktur

2. Importieren Sie zehn Testdaten wie folgt in die Tabelle:

Tabellendaten

3. Nun müssen Sie herausfinden, welche Schülerinnen in der 1. Klasse weiblich sind, bzw. welche Schülerinnen in der 2. Klasse weiblich sind. Die SQL-Anweisung lautet wie folgt:
Wählen Sie * vom Schüler aus, wobei Geschlecht = 'Student' und Klasse = 1 oder Klasse = 2 ist.
Das Ergebnis der SQL-Abfrage entspricht jedoch nicht den Anforderungen. Die Ausführungsergebnisse lauten wie folgt:

Ausführungsergebnisse

Das Hinrichtungsergebnis ergab auch, dass in der 2. Klasse männliche Schüler anwesend waren, was offensichtlich falsch ist.

4. Ändern Sie die SQL-Anweisung und fügen Sie Klammern hinzu. wie folgt:

Wählen Sie * aus dem Schüler aus, wobei Geschlecht = "Student" und (Klasse = 1 oder Klasse = 2)

Das Ergebnis der SQL-Abfrage erfüllt die Anforderungen

analysieren

Im obigen Szenario liegt der Schlüssel zum Problem in der Ausführungsreihenfolge von UND und ODER.
Den Daten zufolge ist die Priorität relationaler Operatoren von hoch nach niedrig: NICHT > UND > ODER
Wenn nach „Where“ eine „OR“-Bedingung steht, trennt „OR“ automatisch die linke und rechte Abfragebedingung.
Genau wie die erste Anweisung im obigen Szenario ist ihre Abfragebedingung in zwei Teile unterteilt (oder):

1. Geschlecht = „weiblich“ und Klasse = 1
2. Klasse = 2

Dabei geht es darum, die Schülerinnen der 1. Klasse und die Schülerinnen der 2. Klasse zu ermitteln. Erfüllt nicht die Anforderungen der ursprünglichen Abfrage.
Die Lösung besteht darin, Klammern zu verwenden, um die Ausführungsreihenfolge zu unterscheiden. <br /> Wie in der zweiten Anweisung im obigen Szenario ist die Abfragebedingung in zwei Teile (und) unterteilt:

1. sex = 'weiblich' 
2. (Klasse=1 bzw. Klasse=2)

Das könnte Sie auch interessieren:
  • Grafische Beschreibung der Ausführungsreihenfolge von SQL-Anweisungen
  • Detaillierte Erläuterung der Ausführungsreihenfolge von SQL-Anweisungen
  • Detaillierte Erläuterung der Ausführung von SQL-Anweisungen (Übersicht über die MySQL-Architektur -> Abfrageausführungsprozess -> SQL-Analysereihenfolge)
  • Lernen Sie die Ausführungsreihenfolge von SQL-Abfragen von Grund auf
  • In diesem Artikel erfahren Sie, wie die Ausführungsreihenfolge von SQL lautet

<<:  Linux (Center OS7) installiert JDK, Tomcat und MySQL, um eine Ausführungsumgebung für Java-Webprojekte zu erstellen.

>>:  So verwenden Sie Axios, um mehrere wiederholte Anfragen in einem Projekt zu filtern

Artikel empfehlen

Erstellen privater Mitglieder in JavaScript

Inhaltsverzeichnis 1. Verwende Closures 2. Verwen...

So erkennen Sie die Dateisystemintegrität basierend auf AIDE in Linux

1. HILFE AIDE (Advanced Intrusion Detection Envir...

Regeln für die Verwendung gemeinsamer MySQL-Indizes

Ein gemeinsamer Index wird auch als zusammengeset...

So kapseln Sie Axios einfach in Vue

Axios in Vue einfügen importiere Axios von „Axios...

Vue.js verwaltet die Kapselung von Hintergrundtabellenkomponenten

Inhaltsverzeichnis Problemanalyse Warum Kapselung...

Einführung in die Verwendung des Base-Link-Tags Base

<br />Wenn Sie auf den Link klicken, wird di...

Detaillierte Erläuterung der ECharts-Mausereignisverarbeitungsmethode

Ein Ereignis ist eine vom Benutzer oder dem Brows...

So installieren Sie MySQL 5.7.29 mit einem Klick mithilfe eines Shell-Skripts

Dieser Artikel bezieht sich auf die Arbeit des 51...

Vue Shuttle-Box ermöglicht Auf- und Abbewegung

In diesem Artikelbeispiel wird der spezifische Co...

Implementierungsbeispiel für die Message Board-Funktion von Node.js+Express

Inhaltsverzeichnis Nachrichtenbrett Erforderliche...