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

MySQL Master-Slave-Replikationsprinzip und zu beachtende Punkte

Vorne geschrieben Ich habe kürzlich ein spezielle...

Über visuelles Design und Interaktionsdesign

<br />Im gesamten Produktdesignprozess liege...

vue2.x-Konfiguration von vue.config.js zur Projektoptimierung

Inhaltsverzeichnis Vorwort vue.config.js-Konfigur...

So drucken Sie hervorgehobenen Code in der Node.JS-Konsole

Vorwort Wenn der Code ausgeführt wird und ein Feh...

HTML+CSS-Implementierungscode für abgerundete Rechtecke

Mir war langweilig und plötzlich fiel mir die Impl...

Detaillierte Erläuterung des Apache SkyWalking-Alarmkonfigurationshandbuchs

Apache SkyWalking Apache SkyWalking ist ein Tool ...