Einführung in den Unterschied zwischen On- und Where-Bedingungen in der MySQL-Left-Join-Operation

Einführung in den Unterschied zwischen On- und Where-Bedingungen in der MySQL-Left-Join-Operation

Priorität

Der Grund, warum das Platzieren derselben Bedingung in beiden Fällen zu unterschiedlichen Ergebnismengen führen kann, liegt in der Priorität. Die Priorität von „on“ ist höher als die von „where“.

Klären Sie zunächst zwei Konzepte:

  • Das Schlüsselwort LEFT JOIN gibt alle Zeilen aus der linken Tabelle (table_name1) zurück, auch wenn in der rechten Tabelle (table_name2) keine passenden Zeilen vorhanden sind.
  • Wenn die Datenbank Datensätze zurückgibt, indem sie zwei oder mehr Tabellen verbindet, generiert sie eine temporäre Zwischentabelle und gibt diese temporäre Tabelle dann an den Benutzer zurück.

Beim Left Join besteht der Unterschied zwischen den beiden darin:

  • 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.

prüfen

Tabelle 1: Tabelle1

Ausweis NEIN
1 Nr. 1
2 Nr. 2
3 Nr. 3

Tabelle 2: table2

NEIN Name
Nr. 1 aaa
Nr. 2 bbb
Nr. 3 ccc
Wähle a.id, a.No, b.name aus Tabelle1 a links, verbinde Tabelle2 b mit (a.No = b.No und b.name='aaa');
Wähle a.id, a.No, b.name aus Tabelle1 a links, verbinde Tabelle2 b auf (a.No = b.No), wobei b.name = „aaa“;

Erster Ergebnissatz:

|id |Nr. |Name|
|---|---|---|
|1 |n1 |aaa|
|2 |n2 |(Null)|
|3 |n3 |(Null)|

Zweiter Ergebnissatz:

|id |Nr. |Name|
|---|---|---|
|1 |n1 |aaa|

Der Ausführungsprozess der ersten SQL-Anweisung ist: Suchen Sie zuerst die Zeile in Tabelle b, deren Name aaa ist (on (a.No = b.No and b.name='aaa')). Suchen Sie dann die Daten der Tabelle A (auch wenn sie nicht den Regeln der Tabelle B entsprechen), generieren Sie eine temporäre Tabelle und geben Sie sie an den Benutzer zurück.

Der Ausführungsprozess der zweiten SQL-Anweisung ist wie folgt: Zuerst wird eine temporäre Tabelle generiert, dann wird die Where-Anweisung ausgeführt, um den Ergebnissatz zu filtern, in dem b.name='aaa' nicht wahr ist, und schließlich wird das Ergebnis an den Benutzer zurückgegeben.

Da „on“ zuerst die Zeilen herausfiltert, die die Bedingungen nicht erfüllen, und dann andere Vorgänge ausführt, liegt es auf der Hand, dass „on“ am schnellsten ist.

Bei der Abfrage mehrerer Tabellen wird „on“ früher wirksam als „where“. Dabei werden mehrere Tabellen zunächst anhand der Join-Bedingungen zwischen den Tabellen zu einer temporären Tabelle zusammengefasst, diese dann mit where gefiltert und anschließend berechnet. Nach der Berechnung wird erneut mit having gefiltert. Daraus ist ersichtlich, dass wir zunächst verstehen müssen, wann die Bedingung wirksam werden soll, und dann entscheiden müssen, wo sie platziert werden soll, damit die Filterbedingungen die richtige Rolle spielen.

Wenn für die Assoziationsoperation der an JOIN beteiligten Tabellen die Zeilen, die die Verbindungsbedingungen nicht erfüllen, innerhalb unseres Abfragebereichs liegen müssen, müssen wir die Verbindungsbedingungen nach ON und nicht nach WHERE setzen. Wenn wir die Verbindungsbedingungen nach WHERE setzen, haben alle Operationen LEFT, RIGHT usw. keine Wirkung. In diesem Fall ist die Wirkung genau dieselbe wie bei einer INNER-Verbindung. Bedingungen, die sich nicht auf die Zeilenauswahl auswirken, werden einfach nach ON oder WHERE eingefügt.

Denken Sie daran: Alle Verbindungsbedingungen müssen nach „ON“ angegeben werden, andernfalls werden alle vorherigen Links- und Rechtszuordnungen nur als Dekoration verwendet und haben keine Wirkung.

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:
  • Analysieren des Unterschieds zwischen der Verwendung von „on“ und „where“ Filtern in MySQL left (right) join
  • Analyse des Unterschieds zwischen „Platzieren auf“ und „Wo“ in MySQL-Abfragebedingungen
  • Analyse des Unterschieds zwischen der Verwendung von Left Join-Einstellungsbedingungen in „on“ und „where“ in MySQL
  • Detaillierte Erklärung des Unterschieds zwischen ON und Where in MySQL

<<:  Manuelles Implementieren des Eingabefelds für den js-SMS-Bestätigungscode

>>:  Lösen Sie das Problem, dass auf VMware15 Centos7 Bridge-Modus SSH plötzlich nicht mehr zugegriffen werden kann

Artikel empfehlen

Javascript verwendet das Integritätsattribut zur Sicherheitsüberprüfung

Inhaltsverzeichnis 1. Dateien mit Skript-Tags imp...

Detaillierte Erläuterung des Beispiels einer MySQL-Einzeltabellenabfrage

1. Daten vorbereiten Die folgenden Operationen we...

So implementieren Sie eine Remote-Verbindung für Redis unter Linux

Nachdem Sie Redis unter Linux installiert haben, ...

Ubuntu 16.04 Installations-Tutorial unter VMware 12

In diesem Artikel finden Sie das Installations-Tu...

Pessimistisches Sperren und optimistisches Sperren in MySQL

In relationalen Datenbanken sind pessimistisches ...

MySQL NULL-Datenkonvertierungsmethode (unbedingt lesen)

Wenn Sie MySQL zum Abfragen der Datenbank verwend...

Teilen Sie das Problem, dass Ubuntu 19 die Docker-Quelle nicht installieren kann

Entsprechend den wichtigsten Websites und persönl...

Detaillierter Prozess der FastAPI-Bereitstellung auf Docker

Docker-Lernen https://www.cnblogs.com/poloyy/p/15...

MySQL-Optimierungslösung: Aktivieren Sie das Protokoll für langsame Abfragen

Inhaltsverzeichnis Vorwort Einrichten der Protoko...

Detailliertes Beispiel der MySQL curdate()-Funktion

Einführung in die MySQL CURDATE-Funktion Bei Verw...

Warum wird für die Webseitenkodierung UTF-8 statt GBK oder GB2312 verwendet?

Wenn Sie die Wahl haben, sollten Sie UTF-8 verwen...

Vergleichende Analyse von MySQL Binlog-Protokollverarbeitungstools

Inhaltsverzeichnis Kanal Maxwell Datenbus Datenüb...

So überprüfen und organisieren Sie Websitedateien mit Dreamweaver8

Was ist der Zweck der Erstellung einer eigenen Web...

Im Mybatis MySQL-Löschvorgang kann nur die erste Datenmethode gelöscht werden

Insekten Wie in der Abbildung gezeigt, begann ich...