So kombinieren Sie die Ergebnisse mehrerer SQL -Abfragen mithilfe der Union -Erklärung

- 2678
- 313
- Phoebe Jeorga
In einem früheren Artikel haben wir über die verschiedene Art von gesprochen VERBINDEN
Wir können in einer Mariadb/MySQL -Datenbank verwenden. Diesmal werfen wir stattdessen einen Blick auf das UNION
Aussage: Wie es funktioniert, wie wir es verwenden können, um das Ergebnis von Abfragen zu kombinieren, die auf verschiedenen Tabellen ausgeführt werden, und was sind seine Besonderheiten.
In diesem Tutorial lernen Sie:
- So verwenden Sie die Union -Erklärung auf einem Mariadb/MySQL -Server
- Was sind die Eigenschaften der Unionserklärung?

Das Ergebnis einer Unionserklärung
Softwareanforderungen und Konventionen verwendet
Kategorie | Anforderungen, Konventionen oder Softwareversion verwendet |
---|---|
System | OS-unabhängig |
Software | Eine funktionierende Mariadb/MySQL -Datenbank |
Andere | Grundkenntnisse der Mariadb/MySQL -Datenbank |
Konventionen | # - erfordert, dass gegebene Linux -Befehle mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mit Verwendung von ausgeführt werden können sudo Befehl$ - Erfordert, dass die angegebenen Linux-Befehle als regelmäßiger nicht privilegierter Benutzer ausgeführt werden können |
Die Unionserklärung
Der UNION
Erklärung lassen Sie uns die Ergebnisse von zwei oder mehr Abfragen kombinieren. Bei der Durchführung eines Jou UNION
Wenn einige Bedingungen erfüllt sind. In diesem Tutorial sehen wir ein grundlegendes und ein Beispiel in der realen Welt dafür, wie wir das verwenden können UNION
Aussage in einer Mariadb/MySQL -Umgebung.
Ein grundlegendes Beispiel
Beginnen wir mit einem sehr grundlegenden Beispiel, um die Besonderheiten des UNION
Stellungnahme. Angenommen, wir haben zwei völlig unabhängige Tische: die erste namens "Film" und die zweite "Farbe". In der ersteren enthält jede Zeile Informationen zu einem Film: Der Titel, das Genre und das Veröffentlichungsdatum. Letztere beherbergt nur den Namen einiger Farben. So sehen die Tische aus:
+----+---------------+---------+--------------+ | id | Titel | Genre | Release_date | +----+---------------+----------+--------------+| 1 | Eine neue Hoffnung | Fantasie | 1977-05-25 | | 2 | Der Pate | Drama | 1972-05-24 | +----+---------------+----------+--------------++- -+ --------+ | id | Name | +----+--------+| 1 | blau | | 2 | Gelb | +----+--------+
Kopieren Und das ist ihre Beschreibung:
+--------------+-------------+------+-----+---------+----------------+ | Feld | Typ | NULL | Schlüssel | Standard | Extra | +--------------+--------------+------+-----+------- -+ ----------------+ | id | int (2) | Nein | Pri | NULL | auto_increment | | Titel | varchar (20) | Nein | | NULL | | | Genre | varchar (20) | Nein | | NULL | | | Release_date | Datum | Nein | | NULL | | +--------------+--------------+------+-----+------- -+----------------++-------+--------------+------+ ------+----------+----------------+| Feld | Typ | NULL | Schlüssel | Standard | Extra | +-------+--------------+------+-----+---------+------ ------------+ | id | int (2) | Nein | Pri | NULL | auto_increment | | Name | varchar (10) | Nein | | NULL | | +-------+-------------+------+-----+---------+----------------+
Kopieren Wie bereits erwähnt, haben diese beiden Tabellen absolut keine Verbindung zueinander. Durch Verwendung der UNION
Die Erklärung können jedoch die Ergebnisse von zwei separaten Abfragen kombinieren, die auf ihnen gestartet wurden. Lass uns rennen:
Title, Genre von Movie Union Select ID, Name aus Farbe;
Der obige Befehl gibt das folgende Ergebnis zurück:
+---------------+---------+ | Titel | Genre | +---------------+----------+| Eine neue Hoffnung | Fantasie | | Der Pate | Drama | | 1 | blau | | 2 | Gelb | +---------------+---------+
Kopieren Erklären wir. Wir haben zwei verschiedene durchgeführt WÄHLEN
Abfragen: In der ersten haben wir den Wert der Spalten "Titel" und "Genre" für jede Zeile in der Filmtabelle ausgewählt. Stattdessen haben wir in der zweiten Spalten "ID" und "Name" aus der Tabelle "Farbe" ausgewählt, ohne einen Filter zu verwenden.
Auch wenn die beiden Tabellen völlig nichts miteinander zu tun haben, da wir die verwendet haben UNION
Anweisung zwischen den beiden Abfragen, die von jeweils zurückgegebenen Zeilen werden kombiniert: Das Ergebnis ist die Tabelle, die Sie oben sehen können.
Selbst wenn in der überwiegenden Mehrheit der Fälle in der realen Welt die aus den beteiligten Tabellen ausgewählten Spalten wahrscheinlich die gleichen Datentypen haben würden, können wir im obigen dummen Beispiel deutlich sehen, wie die UNION
geschieht auch, wenn die Spalten der beiden ursprünglichen Tabellen unterschiedliche Datentypen enthalten: Beide Spalten, die aus der Tabelle "Film" ausgewählt wurden Varchar
Datentyp, während die Spalte "ID" der Tabelle "Farbe" vom Typ ist Int
. Dies ist möglich, da die Datenbank automatisch die benötigten Datenkonvertierungen ausführt.
Eine andere sehr wichtige Sache, die zu bemerken ist, ist, dass die Spalten in der UNION
Ergebnis ermutigte ihre Namen von denen, die in der ausgewählt wurden Erste
Abfrage, die links von der UNION
Schlüsselwort: "Titel" und "Genre". Wenn Sie sich das obige Beispiel ansehen, fragen Sie wahrscheinlich, was die UNION
Aussage kann für das Szenario im wirklichen Leben nützlich sein: Lassen Sie uns ein anderes Beispiel sehen.
Der Fantasy Football -Fall
Vor einiger Zeit war ich an der Schaffung einer kleinen Fantasy -Fußballanwendung beteiligt. In der Datenbank der Anwendung gab es eine Tabelle namens "Club", in der Informationen über die am Wettbewerb beteiligten Fantasy -Clubs gehosteten. Dies ist ein Auszug davon:
+----+-----------------+--------+ | id | Name | Budget | +----+------------------+--------+| 1 | Havanna Blu | 4 | | 2 | Longobarda | 4 | | 3 | Echtes Siderno | 0 | | 4 | Erdbebenteam | 66 | | 5 | Kalapagos | 33 | | 6 | Cantasant | 5 | | 7 | F.C. Mojito | 0 | | 8 | Apoel Nicotina | 1 | | 9 | Dharma | 0 | | 10 | Real 1908 | 12 | +----+-----------------+--------+
Kopieren Im selben Projekt gab es auch einen Tischanruf „Kalender“, in dem jede Zeile ein Übereinstimmung zwischen zwei der oben aufgeführten Clubs darstellte. Da wir 10 Clubs hatten, veranstaltete jeder Meisterschaftstag insgesamt 5 Spiele. Als Beispiel finden Sie einen Auszug aller Spiele der ersten vier Tage:
+----+-----+------+-------------+-------+--------------+ | id | Tag | Host | Host_scores | Gast | guden_cores | +----+-----+------+-------------+-------+--------- ------+ | 1 | 1 | 2 | 75.5 | 8 | 67 | | 2 | 1 | 4 | 80 | 6 | 77 | | 3 | 1 | 7 | 63 | 9 | 71.5 | | 4 | 1 | 3 | 79.5 | 5 | 68 | | 5 | 1 | 10 | 64 | 1 | 72.5 | | 6 | 2 | 5 | 66.5 | 10 | 65.5 | | 7 | 2 | 9 | 82 | 3 | 62.5 | | 8 | 2 | 6 | 83 | 7 | 69.5 | | 9 | 2 | 8 | 77 | 4 | 79.5 | | 10 | 2 | 1 | 67 | 2 | 81.5 | | 11 | 3 | 4 | 73 | 2 | 58 | | 12 | 3 | 7 | 70.5 | 8 | 75.5 | | 13 | 3 | 3 | 66.5 | 6 | 88 | | 14 | 3 | 10 | 74.5 | 9 | 60.5 | | 15 | 3 | 5 | 68.5 | 1 | 72.5 | | 16 | 4 | 9 | 68 | 5 | 69 | | 17 | 4 | 6 | 60 | 10 | 66 | | 18 | 4 | 8 | 70.5 | 3 | 73.5 | | 19 | 4 | 2 | 71.5 | 7 | 79 | | 20 | 4 | 1 | 68.5 | 4 | 68 | +----+-----+------+-------------+-------+--------------+
Kopieren Die erste Spalte jeder Zeile enthält a Ersatzschlüssel
verwendet als die Primärschlüssel
für den Tisch. Der zweite enthält die Ganzzahl, die den Tag, an dem das Match teilnimmt. Der Gastgeber
, Host_cores
, Und Gast
, guden_cores
Spalten enthalten jeweils die ID und die Punktzahlen des Clubs, die als Gastgeber und die des Clubs spielten, die als Gast gespielt haben.
Nehmen wir nun an, wir möchten einen Rang generieren, in dem alle Clubs in absteigender Reihenfolge auf der Basis der Gesamtwerte aufgeführt sind, die sie in den ersten vier Meistertagen erzielten. Wenn jede Club -ID nur in einer Spalte aufgeführt wäre, sagen Sie „Host“, wäre die Operation wirklich einfach: Wir würden nur die Summe der Bewertungen mit dem berechnen SUMME()
Aggregatfunktion und gruppieren die Ergebnisse nach der ID der Clubs und zeigen sie in absteigender Reihenfolge an:
Wählen Sie Host, Sum
Kopieren Da jedoch an jedem Meisterschaftstag ein Verein alternativ als Gastgeber und als Gast spielt, würde die obige Abfrage die gewünschten Ergebnisse nicht zurückgeben, sondern die Gesamtpunktzahlen eines Teams erzielen, einschließlich nur der Punktzahlen, die beim Spielen als Gastgeber (oder alternativ, als Gast).
Das ist ein Fall, in dem die UNION
Die Erklärung kann nützlich sein: Wir können zwei separate Abfragen ausführen, eine mit den Spalten "Host" und "host_scores" und das andere mit den "Guest" und "guit_scores" beteiligt. Wir können dann die verwenden UNION
Anweisung an die Anhängen der Zeile, die sich aus der zweiten Abfrage an die vom ersten zurückgegebenen Abfrage ergibt, und berechnen Sie schließlich die Aggregatwerte. Zusätzlich können wir einen Verbindungsauftrag mit der Tabelle „Club“ durchführen, um den Namen jedes Clubs im Ergebnis zu erscheinen. Hier ist die vollständige Frage:
Daten auswählen.Team_id, Club.Name, Summe (Bewertungen) als Total_Scores aus (Wählen Sie Host AS team_id, Host_scores als Bewertungen aus Kalender Union alle aus.ID = Daten.Team_ID -Gruppe nach Daten.team_id order by Total_scores Desc;
Kopieren Hier ist das Ergebnis der Abfrage:
+---------+-----------------+--------------+ | Team_id | Name | Total_scores | +---------+------------------+--------------+| 6 | Cantasant | 308 | | 4 | Erdbebenteam | 300.5 | | 8 | Apoel Nicotina | 290 | | 2 | Longobarda | 286.5 | | 3 | Echtes Siderno | 282 | | 9 | Dharma | 282 | | 7 | F.C. Mojito | 282 | | 1 | Havanna Blu | 280.5 | | 5 | Kalapagos | 272 | | 10 | Real 1908 | 270 | +---------+-----------------+--------------+
Kopieren Wie Sie sehen können, war am Ende des vierten Meisterschaftstages das „Cantasant“ -Team das mit den höchsten Punktzahlen. Eine andere Sache, die in der obigen Abfrage zu bemerken ist, ist die Verwendung des ALLE
Schlüsselwort zusammen mit UNION
: Es war notwendig, denn wenn die UNION
Die Anweisung wird standardmäßig doppelte Zeilen entfernt. Wenn Gewerkschaft alle
wird verwendet, stattdessen sind die Zeilen erhalten.
Schlussfolgerungen
In diesem Tutorial haben wir gelernt, das zu kennen UNION
Erklärung in Mariadb/MySQL -Datenbanken. Wir haben ein grundlegendes Beispiel gesehen, um einige der Eigenschaften der Aussage und ein Beispiel in der realen Welt zu demonstrieren, das aus einem realen Projekt stammt. Zusammenfassen die Eigenschaften von a UNION
Stellungnahme:
- In der resultierenden Tabelle wird der Name der in der ersten Abfrage ausgewählten Spalten verwendet
- Die Anzahl der Spalten muss in allen Abfragen gleich sein
- Die Datentypen der Spalten können unterschiedlich sein, die Datenbank führt die Konvertierung durch
- Standardmäßig, wenn die
UNION
Die Anweisung wird verwendet, doppelte Zeilen in den Ergebnissen werden entfernt: Um dies zu vermeiden, können wir verwendenGewerkschaft alle
;
Erweitern Sie Ihr Wissen über die Union -Erklärung weiter. Sie können einen Blick auf die offizielle Dokumentation werfen.
Verwandte Linux -Tutorials:
- Installieren Sie MySQL auf Ubuntu 20.04 LTS Linux
- So installieren Sie MySQL auf Almalinux
- Ubuntu 20.04 WordPress mit Apache -Installation
- Dinge zu installieren auf Ubuntu 20.04
- Einführung in MySQL -Speichermotoren
- Ampache Raspberry Pi Installation
- Eine Einführung in Linux -Automatisierung, Tools und Techniken
- So erstellen Sie einen Docker -basierten Lampenstapel mit Docker auf…
- So ändern Sie Mariadb -Benutzerkennwort
- Wie man Daten anhält, um in Java zu postgresql
- « PostgreSQL Performance Tuning für eine schnellere Abfrageausführung
- Einführung in Mariadb und MySQL Triggers »