Analyse des Unterschieds zwischen der Verwendung von Left Join-Einstellungsbedingungen in „on“ und „where“ in MySQL

Analyse des Unterschieds zwischen der Verwendung von Left Join-Einstellungsbedingungen in „on“ und „where“ in MySQL

Dieser Artikel veranschaulicht anhand von Beispielen den Unterschied zwischen der Verwendung von On- und Where-Bedingungen für Left Join in MySQL. Teilen Sie uns die Einzelheiten zu Ihrer Information mit:

1. Zunächst bereiten wir zwei Tabellen zum Testen vor.

CREATE TABLE `a` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT KOMMENTAR 'ID',
 `name` varchar(32) STANDARD '' KOMMENTAR 'name',
 PRIMÄRSCHLÜSSEL (`id`)
)ENGINE=InnoDB STANDARD-CHARSET=utf8;

CREATE TABLE `b` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT KOMMENTAR 'ID',
 `a_id` int(11) DEFAULT '0' COMMENT 'eine Tabellen-ID',
 `name` varchar(32) STANDARD '' KOMMENTAR 'name',
 PRIMÄRSCHLÜSSEL (`id`)
)ENGINE=InnoDB STANDARD-CHARSET=utf8;

Die Daten der beiden Tabellen sind in der Abbildung dargestellt:

Führen Sie die folgende Left-Join-Abfrage aus:

Wähle * aus einem linken Join b auf a.id = b.a_id;

Wir fügen nach „on“ bzw. „where“ Bedingungen hinzu, um zu sehen, ob die Ausführungsergebnisse dieselben sind.

Wähle * aus einem linken Join b auf a.id = b.a_id und b.id > 3;

Wählen Sie * aus einem linken Join b auf a.id = b.a_id, wobei b.id > 3;

In den beiden obigen Anweisungen sind die von uns festgelegten Bedingungen dieselben. In beiden ist b.id > 3, weshalb die angezeigten Ergebnisse unterschiedlich sind.

Die Schlüsselwortfolge einer SQL-Anweisung lautet im Allgemeinen von > wobei > gruppieren nach > haben > sortieren nach

Wenn sich der Left Join im Von-Bereich befindet, filtert die On-Bedingung zuerst die rechte Tabelle des Left Join und dann die Ergebnisse der Where-Bedingung.

Mehrere Left Joins erzeugen eine temporäre Tabelle. Die On-Bedingung dient zum Filtern der Left Join Right-Tabelle und die Where-Bedingung zum Filtern der zuletzt erzeugten temporären Tabelle.

Also:

Wenn die Bedingung b.id > 3 nach on geschrieben wird, wird zuerst die rechte Tabelle (verwandte Tabelle) durchsucht, um die Zeilen zu erhalten, die die Bedingungen erfüllen. Anschließend wird die Haupttabelle links verknüpft, um alle Zeilen der Haupttabelle zurückzugeben. Die Zeilen, die in der rechten Tabelle nicht übereinstimmen, werden durch null dargestellt.

Wenn die Bedingung „b.id > 3“ nach „where“ geschrieben wird, wird die Haupttabelle links mit der rechten Tabelle (zugehörige Tabelle) verbunden, um alle Zeilen zurückzugeben. Anschließend wird die Where-Bedingung verwendet, um die Ergebnisse zu filtern.

Hinweis: Die Bedingung nach „on“ bezieht sich auf die Tabelle rechts (die zugehörige Tabelle) und hat keine Auswirkung auf die Haupttabelle.

Wähle * aus einem linken Join b auf a.id = b.a_id und a.id > 3;

Wir haben für die Haupttabelle nach on die Bedingung a.id > 3 hinzugefügt, aber alle Daten in der Haupttabelle werden weiterhin angezeigt, allerdings wirkt sich dies auf die Anzeige der Tabelle rechts (der zugehörigen Tabelle) aus.

Wenn Sie die Haupttabelle filtern möchten, sollten Sie die Bedingung nach „where“ schreiben.

Wählen Sie * aus einem linken Join b auf a.id = b.a_id, wobei a.id > 3;

Leser, die an weiteren MySQL-bezogenen Inhalten interessiert sind, können sich die folgenden Themen auf dieser Site ansehen: „MySQL-Abfragekenntnisse“, „Zusammenfassung der allgemeinen MySQL-Funktionen“, „MySQL-Protokolloperationskenntnisse“, „Zusammenfassung der MySQL-Transaktionsoperationskenntnisse“, „MySQL-gespeicherte Prozedurkenntnisse“ und „Zusammenfassung der MySQL-Datenbanksperrenkenntnisse“.

Ich hoffe, dass dieser Artikel für jedermann beim Entwurf einer MySQL-Datenbank hilfreich ist.

Das könnte Sie auch interessieren:
  • Analysieren des Unterschieds zwischen der Verwendung von „on“ und „where“ Filtern in MySQL left (right) join
  • Einführung in den Unterschied zwischen On- und Where-Bedingungen in der MySQL-Left-Join-Operation
  • Analyse des Unterschieds zwischen „Platzieren auf“ und „Wo“ in MySQL-Abfragebedingungen
  • Detaillierte Erklärung des Unterschieds zwischen ON und Where in MySQL

<<:  Was ist nach der Installation von Ubuntu 20.04 zu tun (Anleitung für Anfänger)

>>:  Praktische TypeScript-Tipps, die Sie vielleicht nicht kennen

Artikel empfehlen

XHTML-Tags haben ein schließendes Tag

<br />Ursprünglicher Link: http://www.dudo.o...

Einfache Kapselung von Axios und Beispielcode zur Verwendung

Vorwort Als ich kürzlich ein Projekt erstellte, d...

Detaillierte Erklärung der Javascript-String-Methoden

Inhaltsverzeichnis Zeichenfolgenlänge: Länge char...

Verwendung von Vue3-Seiten, Menüs und Routen

Inhaltsverzeichnis 1. Klicken Sie auf das Menü, u...

Analyse der Unterschiede zwischen Mysql InnoDB und MyISAM

MySQL unterstützt viele Arten von Tabellen (d. h....

Vue implementiert das Hinzufügen, Anzeigen und Löschen mehrerer Bilder

In diesem Artikel wird der spezifische Code für V...

Häufige Ursachen und Lösungen für langsame MySQL-SQL-Anweisungen

1. Langsame Abfrage aufgrund fehlenden oder ungül...

Detaillierte Zusammenfassung von MySQL und verbindungsbezogenen Timeouts

MySQL und verbindungsbezogene Timeouts Vorwort: H...

So erstellen Sie mit Dockerfile ein Spiegelbild der Java-Laufzeitumgebung

Die aktuelle Umgebung ist: Centos 7.5 docker-ce 1...

Implementierung des Vue-Zählers

Inhaltsverzeichnis 1. Implementierung des Zählers...

So betreiben Sie eine MySql-Datenbank mit Gorm

1. Festlegen der Groß-/Kleinschreibung von Felder...

Drei Möglichkeiten zur Implementierung von Animationen in CSS3

Hiermit werden die Grundkenntnisse des Interviewt...

Das Vue-Projekt realisiert Anmelde- und Registrierungseffekte

In diesem Artikelbeispiel wird der spezifische Co...