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

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

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

Softwareanforderungen und Linux -Befehlszeilenkonventionen
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 verwenden Gewerkschaft 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