Der Unterschied zwischen „where“ und „on“ in MySQL und wann sie verwendet werden

Der Unterschied zwischen „where“ und „on“ in MySQL und wann sie verwendet werden

Als ich früher Join-Tabellenabfragen geschrieben habe, konnte ich immer nicht den Unterschied zwischen „where“ und „on“ erkennen, was manchmal zu kleinen Problemen in dem von mir geschriebenen SQL führte. Hier ist ein spezieller Artikel, in dem dies festgehalten wird. Wenn Sie den Unterschied nicht erkennen können, lesen Sie bitte

Was ist der Unterschied zwischen den beiden und wann werden sie verwendet?

Hinweis: Unterscheiden Sie zwischen „on“ und „where“. Zunächst unterteilen wir die Verbindung in eine innere und eine nicht-innere Verbindung. Bei einer inneren Verbindung sind die Funktionen von „on“ und „where“ gleich. Normalerweise können wir den Unterschied zwischen ihnen nicht erkennen und sprechen dann von einer nicht-inneren Verbindung.

Im Allgemeinen wird on verwendet, um zwei Tabellen zu verbinden. Es ist nur die Bedingung der Verbindung. Bei der internen Verbindung kann on weggelassen werden. Zu diesem Zeitpunkt stellt es das kartesische Produkt der beiden Tabellen dar. Nach der Verwendung von on-Verbindung generiert MySQL eine temporäre Tabelle, und where basiert auf der temporären Tabelle und filtert gemäß der where-Klausel die Datensätze heraus, die die Bedingungen erfüllen. Daher wird where zum Filtern verwendet.

Innerer Join

Hinweis: Der Join ist standardmäßig ein innerer Join. Bei einem inneren Join können Sie sich „on“ und „where“ als gleich wirksam vorstellen.

Nicht-innerer Join (Left Join, Right Join, Full Join usw.)

Im Allgemeinen ist der Unterschied bei der Verwendung nicht-interner Verbindungen nicht klar.

Beispiel

Als nächstes erstellen wir zwei Tabellen (fügen in jede Tabelle 4 Datensätze ein und verknüpfen die beiden Tabellen über trade_id), um ihre Unterschiede zu veranschaulichen. Das SQL-Skript ist am Ende dieses Artikels angehängt. Dann verwenden wir eine Join-Tabellenabfrage, um den Unterschied zwischen on und where zu veranschaulichen.

1. Inner Join verbindet zwei Tabellen (ohne on und where)

wähle * aus hopegaming_main.test_1234 schließe dich hopegaming_main.test_1235 an

Äquivalent zu

wähle * aus hopegaming_main.test_1234,hopegaming_main.test_1235

Der Ergebnissatz ist das kartesische Produkt der beiden Tabellen

2. Inner Join verbindet zwei Tabellen (mit Ein)

wähle * aus hopegaming_main.test_1234 t1 schließe dich hopegaming_main.test_1235 t2 an auf t1.trade_id = t2.trade_id 

Der Ergebnissatz besteht aus Daten mit derselben Trade-ID in zwei Tabellen.

3. Inner Join verbindet zwei Tabellen (mit Where)

wähle * aus hopegaming_main.test_1234 t1 schließe dich hopegaming_main.test_1235 t2 an, wobei t1.trade_id = t2.trade_id 

Der Ergebnissatz besteht aus den Daten derselben Trade-ID in zwei Tabellen.

Aus den Ergebnissen von 2 und 3 können wir erkennen, dass bei Verwendung eines inneren Join „on“ und „where“ den gleichen Effekt haben.

4. Left Join (das folgende Beispiel verwendet Left Join, um zwei Tabellen zu verbinden)

wähle * aus hopegaming_main.test_1234 t1 links, schließe dich hopegaming_main.test_1235 t2 an auf t1.trade_id = t2.trade_id  

Der Ergebnissatz basiert auf der Tabelle links. Er sucht direkt nach gleichen Werten rechts basierend auf trade_id und führt dann eine Verbindung durch. Wenn in der rechten Tabelle keine übereinstimmenden Daten vorhanden sind, werden sie als null angezeigt.

5. Left Join (im folgenden Beispiel wird Left Join verwendet, um zwei Tabellen zu verbinden) Verbinden Sie zwei Tabellen, und in der Verbindungsbedingung gibt es eine konstante Gleichung

wähle * aus hopegaming_main.test_1234 t1 links, schließe dich hopegaming_main.test_1235 t2 an auf t1.trade_id = t2.trade_id und t2.nick_name = 'wangwu'

Der Ergebnissatz basiert auf der Tabelle links. Wenn die Bedingung „On Join“ keinen übereinstimmenden Datensatz findet, wird „null“ angezeigt.

6. Left Join (im folgenden Beispiel wird Left Join verwendet, um zwei Tabellen zu verbinden) Verbinden Sie zwei Tabellen und setzen Sie den konstanten Ausdruck in die Where-Klausel

wähle * aus hopegaming_main.test_1234 t1 links, schließe dich hopegaming_main.test_1235 t2 an auf t1.trade_id = t2.trade_id, wobei t2.nick_name = „wangwu“

Das Ergebnis zeigt nur die Daten an, die der Where-Klausel entsprechen. Wenn keine Übereinstimmung vorliegt, werden sie nicht angezeigt, da es sich um die Daten in der temporären Tabelle nach dem Filtern der Verbindung handelt.
Es ist nur eine Verbindung. Wenn rechts keine übereinstimmenden Daten vorhanden sind, wird null angezeigt und die Daten links werden ungefiltert angezeigt. Dies ist der größte Unterschied zwischen „where“ und „on“.

Skripte zum Erstellen von Tabellen und Einfügen von Daten:

Tabelle `hopegaming_main`.`test_1234` erstellen (
  `id` varchar(30) NICHT NULL KOMMENTAR 'ID-Nummer',
  `name` varchar(100) STANDARD NULL KOMMENTAR 'Name',
  `trade_id` varchar(100) DEFAULT NULL COMMENT 'Transaktions-ID',
  `Geschlecht` tinyint(4) DEFAULT NULL COMMENT 'Geschlecht',
  `Geburtstag` Zeitstempel(6) NICHT NULL KOMMENTAR 'Geburtsdatum',
  PRIMÄRSCHLÜSSEL (`id`) MIT BTREE,
  SCHLÜSSEL `idx_trade_id` (`trade_id`) MIT BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMISCH;

INSERT INTO hopegaming_main.test_1234
(ID, Name, Trade-ID, Geschlecht, Geburtstag)
WERTE('1', 'zhangsan', '123', 0, AKTUELLER ZEITSTEMPEL(6)),
('2', 'zhaosi', '124', 0, AKTUELLER_ZEITSTAMP(6)),
('3', 'wangwu', '125', 0, AKTUELLER_ZEITSTEMPEL(6)),
('4', 'maqi', '126', 0, AKTUELLER_ZEITSTAMP(6));


Tabelle `hopegaming_main`.`test_1235` erstellen (
  `id` varchar(30) NICHT NULL KOMMENTAR 'ID-Nummer',
  `nick_name` varchar(100) DEFAULT NULL KOMMENTAR 'Alias',
  `trade_id` varchar(100) DEFAULT NULL COMMENT 'Transaktions-ID',
  `Adresse` varchar(100) DEFAULT NULL KOMMENTAR 'Adresse',
  `E-Mail` varchar(6) NOT NULL COMMENT 'Geburtsdatum',
  PRIMÄRSCHLÜSSEL (`id`) MIT BTREE,
  SCHLÜSSEL `idx_trade_id` (`trade_id`) MIT BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMISCH;

INSERT INTO hopegaming_main.test_1235
(ID, Spitzname, Handels-ID, Adresse, E-Mail)
WERTE('1', 'zhangsan', '123', 'beijing', '0000'),
('2', 'wangwu', '123', 'tianjin', '1111'),
('3', 'maqi', '124', 'shanghai', '2222'),
('4', 'yangliu', '127', 'shanxi', '3333');

Zusammenfassen

Dies ist das Ende dieses Artikels über den Unterschied zwischen „where“ und „on“ in MySQL und wann sie verwendet werden. Weitere Informationen zum Unterschied zwischen „where“ und „on“ in MySQL finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Analyse des Unterschieds zwischen „Platzieren auf“ und „Wo“ in MySQL-Abfragebedingungen
  • Einführung in den Unterschied zwischen On- und Where-Bedingungen in der MySQL-Left-Join-Operation
  • Analyse des Unterschieds zwischen der Verwendung von Left Join-Einstellungsbedingungen in „on“ und „where“ in MySQL

<<:  5 Schritte zur Implementierung der Responsive Webdesign-Methode und zum Abschied vom Wasserfallmodell (Grafik-Tutorial)

>>:  Beispielimplementierung der Überprüfung, ob ein Objekt leer ist, in nativem JavaScript

Artikel empfehlen

Hinweise zu den Formularkomponenten des Elements

Elementform und Codeanzeige Weitere Einzelheiten ...

Lösung für den internen Serverfehler Nginx 500

Als ich heute Nginx verwendete, trat ein 500-Fehl...

Lösen Sie das Problem, dass Docker Pull zurückgesetzt wird

In diesem Artikel wird beschrieben, wie Sie das P...

So blockieren Sie IP und IP-Bereich in Nginx

Vorne geschrieben Nginx ist nicht nur ein Reverse...

Detaillierte Erklärung des JavaScript ES6-Moduls

Inhaltsverzeichnis 0. Was ist ein Modul 1.Modul l...

Einfaches Anwendungsbeispiel für MySQL-Trigger

Dieser Artikel veranschaulicht anhand von Beispie...

Lösung für MySQL 8.0 kann nicht gestartet werden 3534

Der MySQL 8.0-Dienst kann nicht gestartet werden ...

Anweisungen zur Verwendung der MySQL-Isolations-Leseansicht

Welche historische Version kann die aktuelle Tran...

Bereinigungsmethode für das Docker-Verzeichnis /var/lib/docker/aufs/mnt

Der Dienst des Unternehmens verwendet Docker und ...

CSS3 realisiert das Papierflugzeug aus der Kindheit

Heute werden wir Origami-Flugzeuge basteln (die A...

Werbefähigkeiten im Baidu Union-Umfeld (grafisches Tutorial)

Kürzlich haben Studierende des User Experience-Tea...