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)
Äquivalent zu
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. 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'); ZusammenfassenDies 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:
|
>>: Beispielimplementierung der Überprüfung, ob ein Objekt leer ist, in nativem JavaScript
Einfache Installation von opencv2: conda installi...
Weiterführende Literatur: MySQL8.0.20-Installatio...
Inhaltsverzeichnis 1. Einleitung 2. Umweltvorbere...
Hinweis: Dieser Artikel wurde von jemand anderem ü...
Vorwort Vor kurzem war ich damit beschäftigt, ein...
Inhaltsverzeichnis Hintergrund Welche Methoden gi...
Vorwort Nachdem ich den vorherigen Artikel über d...
Oftmals wird nach der Fertigstellung eines Webdes...
Die Verwendung von CI zum Erstellen von Docker-Im...
Inhaltsverzeichnis 1. Was ist Front-End-Statusver...
20200804Nachtrag: Der Artikel könnte falsch sein....
Inhaltsverzeichnis Zyklus für für-in für-von währ...
MySQL Workbench – Modellierungs- und Designtool 1...
Inhaltsverzeichnis 1. Hilfe-Befehl 2. Befehl „Spi...
Die Installation von mysql-5.7.17 wird weiter unt...