In der Datenbank führen sowohl die Schlüsselwörter UNION als auch UNION ALL zwei Ergebnismengen zu einer zusammen, aber die beiden unterscheiden sich hinsichtlich Verwendung und Effizienz. UNION in MySQL UNION filtert nach dem Verknüpfen der Tabellen doppelte Datensätze heraus. Nachdem die Tabellen verknüpft wurden, wird der resultierende Ergebnissatz sortiert, doppelte Datensätze werden gelöscht und anschließend die Ergebnisse zurückgegeben. In der Praxis werden in den meisten Anwendungen keine doppelten Datensätze generiert. Am häufigsten ist die UNION der Prozesstabelle und der Verlaufstabelle. wie: wähle * aus gc_dfys union wähle * aus ls_jg_dfys Wenn dieses SQL ausgeführt wird, ruft es zuerst die Ergebnisse der beiden Tabellen ab, verwendet dann den Sortierbereich zum Sortieren und Löschen doppelter Datensätze und gibt schließlich den Ergebnissatz zurück. Wenn die Datenmenge in der Tabelle groß ist, kann dies zu einer Datenträgersortierung führen. UNION ALL in MySQL UNION ALL kombiniert einfach die beiden Ergebnisse und gibt sie zurück. Wenn in den beiden zurückgegebenen Ergebnissätzen doppelte Daten vorhanden sind, enthält der zurückgegebene Ergebnissatz auf diese Weise die doppelten Daten. In Bezug auf die Effizienz ist UNION ALL viel schneller als UNION. Wenn Sie also bestätigen können, dass die beiden zusammengeführten Ergebnismengen keine doppelten Daten enthalten, verwenden Sie UNION ALL wie folgt: wähle * aus gc_dfys, vereinigung aller, wähle * aus ls_jg_dfys Bei Verwendung von UNION sind alle zurückgegebenen Zeilen eindeutig, so als ob Sie DISTINCT auf den gesamten Ergebnissatz angewendet hätten. Wenn die Ergebnisse der Abfrage mit mehreren Tabellen genau dieselben Daten enthalten, entfernt MySQL Duplikate automatisch. Wenn Sie „Union all“ verwenden, werden alle Zeilen zurückgegeben, ohne Duplikate zu entfernen. Wenn Sie eine ORDER BY- oder LIMIT-Klausel verwenden möchten, um das gesamte UNION-Ergebnis zu sortieren oder einzuschränken, sollten Sie die einzelnen SELECT-Anweisungen in Klammern setzen und das ORDER BY- oder LIMIT-Statement nach der letzten einfügen: (WÄHLEN Sie a AUS Tabellenname, wobei a=10 und B=1 ist) UNION (WÄHLEN Sie a AUS Tabellenname, wobei a=11 und B=2 ist) BESTELLUNG NACH LIMIT 10; Dies ist etwas umständlicher: Wählen Sie die Benutzer-ID aus ( wähle Benutzer-ID aus Testa Vereinigung aller wähle Benutzer-ID aus Testb) t Sortieren nach Benutzer-ID-Limit 0,1; In der Klausel. order by ist nur sinnvoll, wenn es zusammen mit limit verwendet wird. Wenn es nicht zusammen verwendet wird, wird es während der Optimierung vom Parser entfernt. Wenn Sie dennoch nach Bedingungen gruppieren möchten, dann: Wähle Benutzer-ID aus (Wähle Benutzer-ID aus Testa, vereinigte alle, wähle Benutzer-ID aus Testb) t Gruppiere nach Benutzer-ID mit Anzahl(Benutzer-ID) = 2; Hinweis: Nach den Vereinigungsklammern muss ein Alias stehen, sonst wird ein Fehler gemeldet Wenn das Datenvolumen mehrerer Union-Tabellen groß ist, empfiehlt es sich natürlich, den Text zuerst zu exportieren und ihn dann mit einem Skript auszuführen. Da reines SQL verwendet wird, ist die Effizienz relativ gering und es werden temporäre Dateien geschrieben. Wenn Ihr Speicherplatz nicht ausreicht, können Fehler auftreten.
Beispiel: Tabelle löschen, wenn `ta` vorhanden ist; TABELLE ERSTELLEN `ta` ( `id` varchar(255) STANDARD NULL, `num` int(11) STANDARD NULL )ENGINE=InnoDB STANDARD-CHARSET=utf8; -- ---------------------------- -- Aufzeichnungen über ihn -- ---------------------------- INSERT INTO `ta` VALUES ('a', '5'); INSERT INTO `ta` VALUES ('b', '10'); INSERT INTO `ta` VALUES ('c', '15'); INSERT INTO `ta` VALUES ('d', '10'); -- ---------------------------- -- Tabellenstruktur für „tb“ -- ---------------------------- Tabelle löschen, wenn `tb` vorhanden ist; TABELLE ERSTELLEN `tb` ( `id` varchar(255) STANDARD NULL, `num` int(11) STANDARD NULL )ENGINE=InnoDB STANDARD-CHARSET=utf8; -- ---------------------------- -- Aufzeichnungen von TB -- ---------------------------- INSERT INTO `tb` VALUES ('b', '5'); INSERT INTO `tb` VALUES ('c', '15'); INSERT INTO `tb` VALUES ('d', '20'); INSERT INTO `tb` VALUES ('e', '99'); Zu diesem Zeitpunkt ist die Nummer des c-Felds, das ta tb entspricht, gleich SQL: Wählen Sie id, SUM(num) FROM ( Wählen Sie * aus ta UNION ALLE Wählen Sie * von tb) als tmp GROUP BY-ID Laufergebnisse: wie: Wählen Sie id, SUM(num) FROM ( Wählen Sie * aus ta UNION Wählen Sie * von tb) als tmp GROUP BY-ID Laufergebnisse: Bei Verwendung von UNION sind alle zurückgegebenen Zeilen eindeutig, so als ob Sie DISTINCT auf den gesamten Ergebnissatz angewendet hätten. Wenn die Ergebnisse der Abfrage mit mehreren Tabellen genau dieselben Daten enthalten, entfernt MySQL Duplikate automatisch. Wenn Sie „Union all“ verwenden, werden alle Zeilen zurückgegeben, ohne Duplikate zu entfernen. 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. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Das könnte Sie auch interessieren:
|
<<: Eine kurze Diskussion über den Werttransfer zwischen Vue-Komponenten (einschließlich Vuex)
>>: Detailliertes Tutorial zur Installation von Anaconda3 auf Ubuntu 18.04
Klären Sie zunächst einige Konzepte: JDBC: Java-D...
RocketMQ ist eine verteilte, warteschlangenbasier...
Vorwort In vielen Fällen werden wir virtuelle Mas...
Implementierungsmethode für die MySQL5.7-Master-S...
<br />Frage: Warum ist es nicht empfehlenswe...
Vorstehend: Dieses Dokument basiert auf der Annah...
Inhaltsverzeichnis 1. Grundlegende Konfiguration ...
Problemhintergrund: Wenn Sie Docker zum Bereitste...
In Webprojekten nutzen wir häufig die Zeitleisten...
Kurzbeschreibung <br />In IE6 und 7 wird in...
Verständnis von Umfragen Tatsächlich liegt der Sc...
TRUNCATE-TABELLE Löscht alle Zeilen in einer Tabe...
Kürzlich sagten einige Freunde, dass sie nach der...
Stellen Sie die Breite des Textkörpers auf die Bre...
Inhaltsverzeichnis 1. Fehlerphänomen 2. Fehlerana...