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

So kompilieren und installieren Sie OpenCV unter Ubuntu

Einfache Installation von opencv2: conda installi...

Detailliertes Tutorial zur Installation der MySQL 8.0.20-Datenbank auf CentOS 7

Weiterführende Literatur: MySQL8.0.20-Installatio...

Das vergessene Button-Tag

Hinweis: Dieser Artikel wurde von jemand anderem ü...

Zusammenfassung verschiedener Methoden zur JS-Datentyperkennung

Inhaltsverzeichnis Hintergrund Welche Methoden gi...

So implementieren Sie eine automatische Remote-Sicherung von MongoDB unter Linux

Vorwort Nachdem ich den vorherigen Artikel über d...

Auch Webdesigner müssen Web-Coding lernen

Oftmals wird nach der Fertigstellung eines Webdes...

So bereinigen Sie regelmäßig private Docker-Server-Images

Die Verwendung von CI zum Erstellen von Docker-Im...

Front-End-Statusverwaltung (Teil 1)

Inhaltsverzeichnis 1. Was ist Front-End-Statusver...

Detaillierte Erklärung, wo das von Docker abgerufene Image gespeichert ist

20200804Nachtrag: Der Artikel könnte falsch sein....

Detaillierte Erklärung der Javascript-Grundlagenschleife

Inhaltsverzeichnis Zyklus für für-in für-von währ...

Detaillierte Erklärung des Workbench-Beispiels in MySQL

MySQL Workbench – Modellierungs- und Designtool 1...

Detaillierte Erläuterung der allgemeinen Docker-Befehle Study03

Inhaltsverzeichnis 1. Hilfe-Befehl 2. Befehl „Spi...

Tutorial zum Anmelden bei MySQL nach der Installation von Mysql 5.7.17

Die Installation von mysql-5.7.17 wird weiter unt...