Analyse des Unterschieds zwischen „Platzieren auf“ und „Wo“ in MySQL-Abfragebedingungen

Analyse des Unterschieds zwischen „Platzieren auf“ und „Wo“ in MySQL-Abfragebedingungen

Einführung

Beim Schreiben von SQL bin ich heute auf ein Problem gestoßen. Die Anforderung besteht darin, die Daten abzufragen und in umgekehrter Reihenfolge nach dem Punktestand und der Anzahl der Besuche in der vergangenen Woche zu sortieren. Das Problem besteht darin, dass die herkömmliche Schreibweise darin besteht, die Bedingung „Tag >= xxx“ in die Where-Klausel einzufügen. Wenn einige Daten in der letzten Woche keine Besuche aufweisen, können diese Daten nicht gefunden werden. Die Lösung besteht darin, die Bedingung in LEFT JOIN einzufügen.

Ausführungsreihenfolge von MySQL-Anweisungen

Lassen Sie mich zunächst ein Konzept erklären. Die Reihenfolge, in der MySQL-Anweisungen ausgeführt werden, ist nicht die Reihenfolge der SQL-Anweisungen. Hier ist das Beispiel-SQL

AUSWÄHLEN
 <Auswahlliste>
AUS
 <linke_Tabelle> <join_typ>
JOIN <rechte_Tabelle > ON <Joinbedingung >
WO
 <wo_bedingung>
GRUPPELN NACH
 < Gruppieren nach Liste >
HABEN
 <Bedingung habend >
BESTELLEN BIS
 < Bestell_nach_Bedingung >
LIMIT <Grenzwert>

Nachfolgend sehen Sie die SQL-Ausführungsreihenfolge

VON <linke_Tabelle>
ON <Beitrittsbedingung>
<join_type> JOIN <rechte_Tabelle>
WHERE <Wo_Bedingung>
GROUP BY <Gruppenliste>
HAVING <Haben_Bedingung>
WÄHLEN 
DISTINCT <Auswahlliste>
ORDER BY <Bestellbedingung>
LIMIT <Grenzwert_Nummer>

Die Rolle von LEFT JOIN

Der Unterschied in den Ergebnismengen hängt nicht nur mit der SQL-Priorität zusammen, sondern auch mit LEFT JOIN

Beim Left Join gilt die Bedingung nach on nur für die rechte Tabelle.

  • on ist die Bedingung, die beim Generieren einer temporären Tabelle verwendet wird. Unabhängig davon, ob die Bedingung on funktioniert oder nicht, werden die Zeilen der linken Tabelle (table_name1) zurückgegeben.
  • Wobei die Bedingung verwendet wird, nachdem die temporäre Tabelle generiert wurde. Zu diesem Zeitpunkt spielt es keine Rolle, ob Left Join verwendet wird oder nicht. Alle Zeilen, die die Bedingung nicht erfüllen, werden herausgefiltert.

Das Obige ist ein Auszug aus zwei Materialien, die es gut zusammenfassen können (die Originallinks finden Sie weiter unten und sie enthalten Beispiele).

Quellen:

  • Schritt für Schritt: Übersicht über die MySQL-Architektur -> Abfrageausführungsprozess -> SQL-Analysereihenfolge
  • Der Unterschied zwischen den On- und Where-Bedingungen in MySQL Left Join-Operationen
  • Der Unterschied zwischen dem Platzieren von Filterbedingungen in „on“ und „where“ in SQL.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • MySQL ruft Daten basierend auf dem JSON-Feldinhalt als Abfragebedingung ab (einschließlich JSON-Arrays).
  • Der Unterschied und die Gründe zwischen den MySQL-Abfragebedingungen nicht in und in
  • Detaillierte Erläuterung des Problems der Übereinstimmung, selbst wenn in der MySQL-Abfragebedingung am Ende der Zeichenfolge ein Leerzeichen steht
  • Detaillierte Erklärung der allgemeinen Verwendung von MySQL-Abfragebedingungen
  • Wird der Index in der MySQL-Abfragebedingung verwendet?
  • MySQL erklärt, wie man Abfragebedingungen optimiert

<<:  Tutorial zur Installation und Konfiguration einer virtuellen Linux-Maschine unter dem Windows-Betriebssystem

>>:  Vue Element-ui-Tabelle realisiert Baumstrukturtabelle

Artikel empfehlen

Ein unvollständiger Leitfaden zur JavaScript-Toolchain

Inhaltsverzeichnis Überblick Statische Typprüfung...

So benennen Sie unter Linux eine Gruppe von Dateien auf einmal um

Unter Linux verwenden wir normalerweise den Befeh...

Lösung für die in Firefox oder IE nicht ermittelte Spannweite

Code kopieren Der Code lautet wie folgt: <html...

So sichern und wiederherstellen Sie die MySQL-Datenbank, wenn sie zu groß ist

Befehl: mysqlhotcopy Dieser Befehl sperrt die Tab...

So importieren Sie Vue-Komponenten automatisch bei Bedarf

Inhaltsverzeichnis Globale Registrierung Teilregi...

Analyse der Prinzipien der MySQL Slow Query-bezogenen Parameter

MySQL Slow Query, dessen vollständiger Name „Slow...

Einfaches Docker Swarm-Tutorial

Schwarm drei virtuelle Maschinen 132,133,134 1. I...

Lösung für mehrere 302-Antworten im Nginx-Proxy (Nginx Follow 302)

Proxying mehrerer 302er mit proxy_intercept_error...

Lösen Sie das Problem des MySQL-Datenverlusts, wenn Docker Redis neu startet

Amtliche Dokumentation: Daher sollte MySQL wie fo...

Kreatives „Über uns“-Webseitendesign

Einzigartige „Über“-Seiten Eine gute Möglichkeit, ...